python 数据可视化
一、使用Matplotlib生成数据图
1. matplotlib画图中文乱码小方框的解决方法
链接:https://blog.csdn.net/HappyRocking/article/details/91491107
链接:https://blog.csdn.net/qq_36556893/article/details/90145177
新细明体:PMingLiU
细明体:MingLiU
标楷体:DFKai-SB
黑体:SimHei
宋体:SimSun
新宋体:NSimSun
仿宋:FangSong
楷体:KaiTi
仿宋_GB2312:FangSong_GB2312
楷体_GB2312:KaiTi_GB2312
微软正黑体:Microsoft JhengHei
微软雅黑体:Microsoft YaHei
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['simhei']
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
plt.rcParams['font.sans-serif']=['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
# 使用Matplotlib的字体管理器加载中文字体
my_font=fm.FontProperties(fname="C:\Windows\Fonts\msyh.ttf")
plt.legend(labels=['疯狂Java讲义年销量', '疯狂Android讲义年销量'],
loc='lower right', prop=my_font)
2. 知识点
pyplot子模块下的plot()函数
color :颜色
linewidth :宽度
linestyle :样式(线)
linestyle 折现样式:
- -:代表实线,这是默认值。
- –:代表虚线。
- ::代表点线。
- -.:代表短线、点相间的虚线。
legend()函数来实现图例
第一个list参数(handles参数)用于引用折线图上的每条折现;
第二个list参数(labels)代表为每条折线所添加的图例;
fm.FontProperties(类)=“字体位置”:字体管理器加载中文字体
loc参数:指定图例的添加位置,支持如下参数值:
- ‘best’:自动选择最佳位置。
- 'upper right,:将图例放在右上角。
- ‘upper left’:将图例放在左上角。
- ‘lower left’:将图例放在左下角。
- ‘lower right’:将图例放在右下角。
- ‘right’:将图例放在右边。
- ‘centerleft’:将图例放在左边居中的位置。
- ‘centerright’:将图例放在右边居中的位置。
- 'lowercenter*:将图例放在底部居中的位置。
- 'uppercenter*:将图例放在顶部居中的位置。
- ‘center’:将图例放在中心。
prop属性指定使用中文字体。
xlable()函数设置X轴的名称
ylabel()函数设置Y轴的名称
title()函数设置整个数据图的标题
xticks()函数改变X轴的刻度值(允许使用文本作为刻度值)
yticks()函数改变Y轴的刻度值(允许使用文本作为刻度值)
gca()函数:获取坐标轴信息对象,然后对坐标轴进行控制。
ax.xaxis.set_ticks_position(‘bottom’):设置将X轴的刻度值放在底部X轴上
ax.yaxis.set_ticks_position(‘left’):设置将Y轴的刻度值放在底部X轴上
ax.spines[‘right’].set_color(‘none’):设置右边坐标轴线的颜色(设置为none表示不显示)
ax.spines[‘top’].set_color(‘none’):设置顶部坐标轴线的颜色(设置为none表示不显示)
ax.spines[‘bottom’].set_position((‘data’, 70000)):定义底部坐标轴线的位置(放在70000数值处)
调用subplot()函数可以创建一个子图,然后程序就可以在子图上进行绘制。subplot(nrows, ncols,index, **kwargs)函数
nrows参数指定将数据图区域分成多少行:
ncols参数指定将数据图区域分成多少列;
index参数指定获取第几个区域。
使用GridSpec对绘图区域进行分割。
3. 安装Matplotlib包
pip install matplotlib
pip install Matplotlib --user -i https://pypi.douban.com/simple
python -m pip install matplotlib
pydoc 查看文档
python -m pydoc -p 8899
4. Matplotlib数据图入门(折线图plot())
pyplot子模块下的plot()函数
(1)单条折线图
代码如下:
import matplotlib.pyplot as plt
# 定义2个列表分别作为X轴、Y轴数据
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]
# 第一个列表代表横坐标的值,第二个代表纵坐标的值
#plt.plot(x_data, y_data)
plt.plot(y_data)
# 调用show()函数显示图形
plt.show()
(2)多条折线图
代码如下:
import matplotlib.pyplot as plt
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']
# 定义2个列表分别作为两条折线的Y轴数据
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]
y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700]
# 传入2组分别代表X轴、Y轴的数据
#plt.plot(x_data, y_data, x_data, y_data2)
plt.plot(x_data, y_data)
plt.plot(x_data, y_data2)
# 调用show()函数显示图形
plt.show()
color :颜色
linewidth :宽度
linestyle :样式(线)
linestyle 折现样式:
- -:代表实线,这是默认值。
- –:代表虚线。
- ::代表点线。
- -.:代表短线、点相间的虚线。
代码如下:
import matplotlib.pyplot as plt
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']
# 定义2个列表分别作为两条折线的Y轴数据
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]
y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700]
# 指定折线的颜色、线宽和样式
plt.plot(x_data, y_data, color = 'red', linewidth = 2.0, linestyle = '--')
plt.plot(x_data, y_data2, color = 'blue', linewidth = 3.0, linestyle = '-.')
# 调用show()函数显示图形
plt.show()
5. 管理图例
legend()函数来实现图例
第一个list参数(handles参数)用于引用折线图上的每条折现;
第二个list参数(labels)代表为每条折线所添加的图例;
fm.FontProperties(类)=“字体位置”:字体管理器加载中文字体
loc参数:指定图例的添加位置,支持如下参数值:
- ‘best’:自动选择最佳位置。
- 'upper right,:将图例放在右上角。
- ‘upper left’:将图例放在左上角。
- ‘lower left’:将图例放在左下角。
- ‘lower right’:将图例放在右下角。
- ‘right’:将图例放在右边。
- ‘centerleft’:将图例放在左边居中的位置。
- ‘centerright’:将图例放在右边居中的位置。
- 'lowercenter*:将图例放在底部居中的位置。
- 'uppercenter*:将图例放在顶部居中的位置。
- ‘center’:将图例放在中心。
prop属性指定使用中文字体。
代码如下:
import matplotlib.pyplot as plt
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']
# 定义2个列表分别作为两条折线的Y轴数据
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]
y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700]
# 指定折线的颜色、线宽和样式
ln1, = plt.plot(x_data, y_data, color = 'red', linewidth = 2.0, linestyle = '--')
ln2, = plt.plot(x_data, y_data2, color = 'blue', linewidth = 3.0, linestyle = '-.')
import matplotlib.font_manager as fm
# 使用Matplotlib的字体管理器加载中文字体
my_font=fm.FontProperties(fname="C:\Windows\Fonts\msyh.ttf")
# 调用legend函数设置图例
#plt.legend(handles=[ln2, ln1], labels=['疯狂Android讲义年销量', '疯狂Java讲义年销量'],
# loc='lower right', prop=my_font)
plt.legend(labels=['疯狂Java讲义年销量', '疯狂Android讲义年销量'],
loc='lower right', prop=my_font)
# 调用show()函数显示图形
plt.show()
代码如下:
import matplotlib.pyplot as plt
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']
# 定义2个列表分别作为两条折线的Y轴数据
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]
y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700]
# 指定折线的颜色、线宽和样式
plt.plot(x_data, y_data, color = 'red', linewidth = 2.0,
linestyle = '--', label='疯狂Java讲义年销量')
plt.plot(x_data, y_data2, color = 'blue', linewidth = 3.0,
linestyle = '-.', label='疯狂Android讲义年销量')
import matplotlib.font_manager as fm
# 使用Matplotlib的字体管理器加载中文字体
my_font=fm.FontProperties(fname="C:\Windows\Fonts\SimHei_0.ttf")
# 调用legend函数设置图例
plt.legend(loc='best', prop=my_font)
# 调用show()函数显示图形
plt.show()
6. 管理坐标轴
xlable()函数设置X轴的名称
ylabel()函数设置Y轴的名称
title()函数设置整个数据图的标题
xticks()函数改变X轴的刻度值(允许使用文本作为刻度值)
yticks()函数改变Y轴的刻度值(允许使用文本作为刻度值)
代码如下:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['simhei']
plt.rcParams['axes.unicode_minus'] = False
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']
# 定义2个列表分别作为两条折线的Y轴数据
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]
y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700]
# 指定折线的颜色、线宽和样式
plt.plot(x_data, y_data, color = 'red', linewidth = 2.0,
linestyle = '--', label='疯狂Java讲义年销量')
plt.plot(x_data, y_data2, color = 'blue', linewidth = 3.0,
linestyle = '-.', label='疯狂Android讲义年销量')
# 调用legend函数设置图例
plt.legend(loc='best')
# 设置两条坐标轴的名字
plt.xlabel("年份")
plt.ylabel("图书销量(本)")
# 设置数据图的标题
plt.title('疯狂图书的历年销量')
# 设置Y轴上的刻度值
# 第一个参数是点的位置,第二个参数是点的文字提示
plt.yticks([50000, 70000, 100000],
[r'挺好', r'优秀', r'火爆'])
# 调用show()函数显示图形
plt.show()
gca()函数:获取坐标轴信息对象,然后对坐标轴进行控制。
ax.xaxis.set_ticks_position('bottom'):设置将X轴的刻度值放在底部X轴上
ax.yaxis.set_ticks_position('left'):设置将Y轴的刻度值放在底部X轴上
ax.spines['right'].set_color('none'):设置右边坐标轴线的颜色(设置为none表示不显示)
ax.spines['top'].set_color('none'):设置顶部坐标轴线的颜色(设置为none表示不显示)
ax.spines['bottom'].set_position(('data', 70000)):定义底部坐标轴线的位置(放在70000数值处)
代码如下:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['simhei']
plt.rcParams['axes.unicode_minus'] = False
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']
# 定义2个列表分别作为两条折线的Y轴数据
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]
y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700]
# 指定折线的颜色、线宽和样式
plt.plot(x_data, y_data, color = 'red', linewidth = 2.0,
linestyle = '--', label='疯狂Java讲义年销量')
plt.plot(x_data, y_data2, color = 'blue', linewidth = 3.0,
linestyle = '-.', label='疯狂Android讲义年销量')
import matplotlib.font_manager as fm
# 使用Matplotlib的字体管理器加载中文字体
my_font=fm.FontProperties(fname="C:\Windows\Fonts\msyh.ttf")
# 调用legend函数设置图例
plt.legend(loc='best')
# 设置两条坐标轴的名字
plt.xlabel("年份")
plt.ylabel("图书销量(本)")
# 设置数据图的标题
plt.title('疯狂图书的历年销量')
# 设置Y轴上的刻度值
# 第一个参数是点的位置,第二个参数是点的文字提示
plt.yticks([50000, 70000, 100000],
[r'挺好', r'优秀', r'火爆'])
ax = plt.gca()
# 设置将X轴的刻度值放在底部X轴上
ax.xaxis.set_ticks_position('bottom')
# 设置将Y轴的刻度值放在底部X轴上
ax.yaxis.set_ticks_position('left')
# 设置右边坐标轴线的颜色(设置为none表示不显示)
ax.spines['right'].set_color('none')
# 设置顶部坐标轴线的颜色(设置为none表示不显示)
ax.spines['top'].set_color('none')
# 定义底部坐标轴线的位置(放在70000数值处)
ax.spines['bottom'].set_position(('data', 70000))
# 调用show()函数显示图形
plt.show()
7. 管理多个子图
调用subplot()函数可以创建一个子图,然后程序就可以在子图上进行绘制。subplot(nrows, ncols,index, **kwargs)函数
nrows参数指定将数据图区域分成多少行:
ncols参数指定将数据图区域分成多少列;
index参数指定获取第几个区域。
代码如下:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['simhei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure()
# 定义从-pi到pi之间的数据,平均取64个数据点
x_data = np.linspace(-np.pi, np.pi, 64, endpoint=True) # ①
# 将整个figure分成两行两列,第三个参数表示该图形放在第1个网格
plt.subplot(2, 2, 1)
# 绘制正弦曲线
plt.plot(x_data, np.sin(x_data))
plt.gca().spines['right'].set_color('none')
plt.gca().spines['top'].set_color('none')
plt.gca().spines['bottom'].set_position(('data', 0))
plt.gca().spines['left'].set_position(('data', 0))
plt.title('正弦曲线')
# 将整个figure分成两行两列,并将该图形放在第2个网格
plt.subplot(222)
# 绘制余弦曲线
plt.plot(x_data, np.cos(x_data))
plt.gca().spines['right'].set_color('none')
plt.gca().spines['top'].set_color('none')
plt.gca().spines['bottom'].set_position(('data', 0))
plt.gca().spines['left'].set_position(('data', 0))
plt.title(<