第十九章 python 数据可视化 Matplotlib Pygal

本文详细介绍了使用Python的Matplotlib和Pygal库进行数据可视化的实践,包括解决Matplotlib中文乱码问题,折线图、柱状图、饼图等多种图表的绘制,以及Pygal的配置和常见数据图的使用。此外,还涵盖了数据处理的各个方面,如CSV、JSON格式数据的读取和数据清洗。
摘要由CSDN通过智能技术生成

一、使用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(<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值