需要源码和PPT请点赞关注收藏后评论区留言私信~~~
设置pyplot的动态rc参数
pyplot使用rc配置文件来自定义图形的各种默认属性,被称为rc配置或rc参数
在pyplot中几乎所有的默认属性都是可以控制的,例如视图窗口大小以及每英寸点数、线条宽度、颜色和样式、坐标轴、坐标和网格属性、文本、字体等
两种方式可以设置参数,即全局参数定制和rc设置方法。 查看matplotlib的rc参数: import matplotlib as plt print(plt.rc_params())
1.使用参数字典
参数众多 常用参数:
Axes:设置坐标轴边界、颜色、坐标 刻度值大小和网格的显示;
Figure:设置边界颜色、图形大小和子区;
Font:设置字号、字体和样式;
Grid:设置网格颜色和线型;
Legend:设置图例和其中的文本显示;
Lines:设置线条颜色、宽度、线型等;
Savefig:对保存图像进行单独设置;
Xtick和ytick:X、Y轴的主刻度和次刻度设置颜色、大小、方向和标签大小。
全局参数定制
import matplotlib as plt print(plt.matplotlib_fname()) #显示当前用户的配置文件目录
查找到当前用户的配置文件目录,然后用编辑器打 开,修改matplotlibrc文件,即可修改配置参数
2. 线条的常用rc参数名称、解释与取值
常用线条类型解释
需要注意的是,由于默认的Pyplot字体并不支持中文字符的显示,因此需要通过设置font.sans-serif参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的部分字符无法显示,因此需要同时更改axes.unicode_minus参数
添加以下两行代码即可在matplotlib中显示中文
plt.rcParams['font.family'] = ['SimHei'] #用来显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
除了设置线条和字体的rc参数外,还有设置文本、箱线图、坐标轴、刻度、图例、标记、图片、图像保存等rc参数
rc参数设置示例1
import matplotlib.pyplot as plt import numpy as np import pandas as pd import matplotlib %matplotlib inline fig ,axes = plt.subplots() #配置中文显示 plt.rcParams['font.family'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False def f(t): return np.cos(2*np.pi*t) x1 = np.arange(0.0,4.0,0.5) x2 = np.arange(0.0,4.0,0.01) plt.figure(1) plt.subplot(2,2,1) plt.plot(x1,f(x1),'bo',x2,f(x2),'k') plt.title('子图1') plt.subplot(2,2,2) plt.plot(np.cos(2*np.pi*x2),'r--') plt.title('子图2') plt.show()
rc参数设置示例2
fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = 'o',label = 'one') ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = '+',label = 'two') ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = 'v',label = 'three') ax.legend(loc = 'best')
set_xticks设置刻度
fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = 'o',label = 'one') ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = '+',label = 'two') ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = 'v',label = 'three') ax.set_xticks([0,5,10,15,20,25,30,35]) ax.legend(loc = 'best')
用set_xticklabels改变刻度
fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = 'o',label = 'one') ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = '+',label = 'two') ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = 'v',label = 'three') ax.set_xticklabels(['x0','x1','x2','x3','x4','x5'],rotation = 30,fontsize = 'large') ax.legend(loc = 'best')
其中rotation参数表示X坐标标签的旋转角度,fontsize为字号
3 绘图的填充
(1)调用函数fill_between() 实现曲线下面部分的填充
x:第一个参数表示覆盖的区域, x,表示整个x都覆盖
0:表示覆盖的下限
y:表示覆盖的上限是y这个曲线
facecolor:覆盖区域的颜色
alpha:覆盖区域的透明度[0,1],其值越大,表示越不透明
x = np.linspace(0,1,500) y = np.sin(3*np.pi*x)*np.exp(-4*x) fig,ax = plt.subplots() plt.plot(x,y) plt.fill_between(x, 0, y, facecolor = 'green', alpha = 0.3)
(2)部分区域的填充
plt.fill_between(x[15:300], 0, 0.4, facecolor='green', alpha=0.3)
(3)两条曲线之间的区域填充
import numpy as np import matplotlib.pyplot as plt x=np.linspace(0,1,500) y1=np.sin(3*np.pi*x)*np.exp(-4*x) y2 = y1 + 0.2 plt.plot(x, y1,'b') plt.plot(x, y2, 'r') plt.fill_between(x, y1, y2, facecolor='green', alpha=0.3) plt.show()
(4)利用fill进行绘图的填充:
import numpy as np import matplotlib.pyplot as plt x=np.linspace(0,1,500) y=np.sin(3*np.pi*x)*np.exp(-4*x) fig,ax=plt.subplots() ax.fill(x,y) plt.show()
4 绘图注释
绘图时有时需要在图表中加文本注解 这时可以通过text函数在指定的位置(x,y)加入文本注解; 通过annotate()在指定位置实现指向型注释
Matplotlib对LaTeX有一定的支持,在Matplotlib中,可以使用LaTeX的命令来编辑公式,只需要在字符串前面加一个r即可
1 指向型注释annotate() 2. 无指向型注释text()
示例如下
import numpy as np import matplotlib.pyplot as plt %matplotlib inline #配置中文显示 plt.rcParams['font.family'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False x=np.arange(-10,11,1) y=x*x plt.plot(x,y) plt.title('这是一个标题示例') plt.text(-2.5,30,'funciton y=x*x') plt.show() plt.annotate('这是一个示例',xy=(0,1), xytext=(-2,22),arrowprops={'headwidth':10,'facecolor':'r'})
如在柱状图上加入文本数字,可以清楚地显示每个类别的数量。如6个城市8月份的日均最高气温
plt.rcParams['font.family'] = ['SimHei'] data = [25,30,32,34,34,23] label = ['青海','兰州','北京','上海','广州','拉萨'] plt.xticks(range(len( data)),label) plt.xlabel('城市') plt.ylabel('温度') plt.title('六城市8月份日均最高气温') plt.bar(range(len( data)),data) for x,y in zip(range(len(data)),data): plt.text(x,y,y,ha = 'center',va = 'bottom') plt.show()
创作不易 觉得有帮助请点赞关注收藏~~~