文章目录
2.设置坐标轴范围 plt.xlim() & plt.ylim()
3.设置坐标标签 plt.xticks() & plt.yticks()
5. 设置坐标 轴 标签 plt.xlabel() & plt.ylabel()
7.增加图例 和 网格 plt.legend() & plt.grid()
(二)subplots_adjust()方法解决图表与画布的间距问题
(九)绘制 3D图像专题 (三维柱状图、曲面图、散点图、曲线图合集)
–安装命令–
pip install matplotlib
1.plot()方法基本
1.1 方法概述
plot()方法是最常用的方法之一,Matplotlib绘图基本主要使用plot()函数。其通常用来绘制折线图,也可以用来绘制散点图。
因为plot()方法的构造过于复杂,很难一次将所有的参数将清楚。所以这里分块进行,按照功能来一步一步解析。plot()每多设定一个参数,每多一个plt命令,图像就会多一部分细节。
plot(x,y,format_string,**kwargs)
这里暂先展示一小部分参数,
其中
参数x
x 指x轴的数据 可以是一个列表,元组,Series等。也可以是range对象。
参数y
指的y轴的数据,可以选择的格式同x:可以是一个列表,元组,Series等。也可以是range对象。。
参数format_string
指的是控制曲线格式的字符串
kwargs
通过kwargs可以传入键值参数。
1.2 不设置x时
当不设置x时,x轴默认为0,1,2…这样的数值类型。
import matplotlib.pyplot as plt plt.plot([1, 1, 0, 0, -1, 0, 1, 1, -1]) plt.show()
1.3 x中元素的顺序
绘图时,绘图的顺序与x内数值本身的大小无关,数值在x中的顺序,即为绘图的先后顺序。
如:
import matplotlib.pyplot as plt plt.plot([2, 1, 3, 4, 5], [2, 5, 8, 12, 18]) plt.show()
即绘制此折线图时,先绘制了(2,2)点,再绘制了(1,5)点,接着绘制了(3, 8)点。
在x中,只要存在一个数据是字符串类型,则x中所有的元素都视为字符串,这些元素在图像中不再有大小之分。
代码示例如下:
import matplotlib.pyplot as plt plt.plot([3, 1, '2', 4, 5], [2, 8, 12, 5, 9]) plt.show()
2.设置坐标轴范围 plt.xlim() & plt.ylim()
plt.ylim() 设置y轴范围。
plt.xlim() 设置x轴范围。
import matplotlib.pyplot as plt plt.plot([1, 1, 0, 0, -1, 0, 1, 1, -1]) plt.ylim(-3, 3) plt.xlim(-10, 20) plt.show()
3.设置坐标标签 plt.xticks() & plt.yticks()
设置标签,即可以将plot()中传入的x、y的元素值在坐标轴中以其他形式显示出来。
具体方法为
plt.xticks(location, lables,rotation)
plt.yticks(location, lables,rotation)
其中,location表示原x/y轴的数据(而不是位置索引下标),lables指新设定的标签,元素数量要与location相同,且与location相同位置上有着一一对应的关系。
rotation参数通过设定一个角度的数值,可以将设定的标签旋转一定的角度。(示例代码中将x轴标签旋转45度)
且在设置标签过程中,标签可以选择设置部分。没有设置的标签也不会再显示原值。(如下边代码中没有设置x轴上数值“2”处的标签)
具体示例如下:
import matplotlib.pyplot as plt # 正常显示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.plot([1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 1, 0, 0, -1, 0, 1, 1, -1]) plt.ylim(-3, 3) plt.xlim(-10, 20) plt.xticks([1, 3, 4, 5, 6, 7, 8, 9], ['02-01', '02-03', '02-04', '02-05', '02-06', '02-07', '02-08', '02-09'], rotation=45) plt.yticks([0, 1, -1], ['低', '高', '中']) plt.show()
4.负号正常显示 与 中文正常显示 问题
负号正常显示
rcParams 是Matplotlib库中pyplot包绘图的参数字典,key为’axes.unicode_minus’的默认取值(value)为True,表示unicode的minus类型,有些字体对其兼容性支持不够,导致负号无法正常显示,现在将’axex.unicode_minus’的取值设为False,则可正常显示负号。
代码:
plt.rcParams[‘axes.unicode_minus’] = False
中文正常显示
默认情况下,图形中的中文为乱码形式
每次绘图前,通过代码更改参数。更改Matplotlib包中pyplot包的参数字(rcParams)字体的无衬线字体属性(font.sans-serif, 为参数字典的一个key)的取值(value),现将其设定为以’SimHei’为元素的数组形式。
代码:
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
5. 设置坐标 轴 标签 plt.xlabel() & plt.ylabel()
在图像中添加坐标轴标题可以直观地显示坐标轴代表的数据变量。
plt.xlabel()
plt.ylabel()
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.plot([1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 1, 0, 0, -1, 0, 1, 1, -1]) plt.xticks([1, 2, 3, 4, 5, 6, 7, 8, 9], ['02-01', '02-02', '02-03', '02-04', '02-05', '02-06', '02-07', '02-08', '02-09'], rotation=45) plt.yticks([0, 1, -1], ['低', '高', '中']) plt.xlabel('日期') plt.ylabel('A指标') plt.show()
6.增加标题 plt.title()
plt.title()
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.title('xxxxxxxxxxx图像') plt.plot([1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 1, 0, 0, -1, 0, 1, 1, -1]) plt.xticks([1, 2, 3, 4, 5, 6, 7, 8, 9], ['02-01', '02-02', '02-03', '02-04', '02-05', '02-06', '02-07', '02-08', '02-09'], rotation=45) plt.yticks([0, 1, -1], ['低', '高', '中']) plt.xlabel('日期') plt.ylabel('A指标') plt.show()
7.增加图例 和 网格 plt.legend() & plt.grid()
增加图例可以通过plt.plot()方法的label参数添加,也可以通过plt.legend()添加。
增加网格通过plt.grid()方法添加。
plt.legend()
第一个参数是一个可迭代对象,其元素为表示图例的字符串,其传入时的顺序与上边代码中线条绘制的顺序一一对应。
第二个参数是loc参数,表示图例显示的位置。
第三个参数为字体大小fontsize。
plt.grid(b=None,which=‘major’, axis=‘both’, **kwargs)
参数b:
布尔数据类型,设定是否显示grid。默认为None,不显示。如需显示,则将B设定为True。
参数which:
设定 分割标示线(tick) 的类型,取值为"major", “minor"或者"both”。
默认为"major",表示以原本坐标轴分割标示线为准;
若取值为"minor",则表示 进一步细分 坐标轴分割标示线,但是 分割标准要提前设定好。如果只是设定值为"minor",则图形不会显示grid。
“both"表示大小区间坐标轴分割线都有。
参数axis:
制定绘制grid的坐标轴,取值为"both”(default), “x”, 或者"y"。both表示X轴和Y轴的grid都绘制。 默认都绘制。
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.plot([5.12, 5.15, 5.13, 5.10, 5.2, 5.25, 5.19, 5.24, 5.31], label='股票A收盘价') plt.plot([5.09, 5.13, 5.16, 5.12, 5.09, 5.25, 5.16, 5.20, 5.25], label='股票B收盘价') plt.xticks(range(9), [ '2021-02-01', '2021-02-02', '2021-02-03', '2021-02-04', '2021-02-05', '2021-02-06', '2021-02-07', '2021-02-08', '2021-02-09'], rotation=45) plt.title('某股票收盘价时序图') plt.xlabel('日期') plt.ylabel('价格') plt.grid(True, axis='y') plt.legend() plt.show()