Python learning - the basis of Matplotlib data visualization


Matplotlib data visualization basics

Official website: https://matplotlib.org/
Baidu front-end: https://www.echartsjs.com/zh/index.html
plotly: visualization tool: https://plot.ly/python/

matplotlib: The most popular Python bottom-level drawing library, mainly for data visualization charts, the name is taken from MATLAB, and it is built by imitating MATLAB

1. Basic grammar and line chart

insert image description here

Example 1

from matplotlib import pyplot as plt
plt.figure(figsize=(20,10),dpi=80)
x=range(2,26,2)
y=[15,13,14.5,17,20,25,26,26,27,22,18,15]
plt.plot(x,y)
plt.xticks(x[::1])
plt.yticks(range(min(y),max(y)+1))
plt.show()

insert image description here

Example 2

import random
from matplotlib import pyplot as plt
## 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
plt.figure(figsize=(20,10),dpi=80)#设置窗口大小
y= [random.randint(20,35) for i in range(120)]
x=range(0,120)
plt.plot(x,y)
_x=list(x)
# _xticks_labels=["hello,{}".format(i) for i in _x]
_xticks_labels=["10点{}分".format(i) for i in range(60)]
_xticks_labels+=["11点{}分".format(i) for i in range(60)]
#取步长,数字和字符串一一对应,数据长度一样
plt.xticks(_x[::3],_xticks_labels[::3],rotation=45)#rotation旋转90度
plt.xlabel('时间')
plt.ylabel('温度 单位(℃)')
plt.title('十点每分钟温度变化情况')
plt.show()

import numpy as np  #导入NumPy库
import matplotlib.pyplot as plt
data = np.arange(0,1.1,0.01)
plt.figure(figsize=(20,10),dpi=80) #设置图片大小
plt.title('lines') ## 添加标题
plt.xlabel('x')    ## 添加x轴的名称
plt.ylabel('y')    ## 添加y轴的名称
plt.xlim((0,1))    ## 确定x轴范围
plt.ylim((0,1))    ## 确定y轴范围
plt.xticks([0,0.2,0.4,0.6,0.8,1]) ## 规定x轴刻度
plt.yticks([0,0.2,0.4,0.6,0.8,1]) ## 确定y轴刻度
plt.plot(data,data**2)  ## 添加y=x^2曲线
plt.plot(data,data**4)  ## 添加y=x^4曲线
plt.legend(['y=x^2','y=x^4'])
plt.grid(alpha=0.1)#绘制网格和透明度更改[0:1]
plt.savefig("F:\python\y=x^2.png")
plt.show()

subgraph

##第一幅子图
p1 = plt.figure(figsize=(8,6),dpi=80)## 确定画布大小
ax1 = p1.add_subplot(2,1,1)## 创建一个两行1列的子图,并开始绘制第一幅
##第二幅子图
ax2 = p1.add_subplot(2,1,2)## 创开始绘制第2幅

rc parameter adjustment

insert image description here

plt.plot(x,y,label="硕硕",color="cyan",linestyle="--")
plt.rcParams['lines.linestyle'] = '-.' #改变线性'--'':''-'
plt.rcParams['lines.linewidth'] = 3    #线条宽度0~10
lines.markers     #点形状o D h . , S
lines.markersize  #点大小0~10

Chinese display problem

## 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
plt.plot(x,y,label="$sin(x)$")              ## 绘制三角函数
plt.title('sin曲线')
plt.savefig('../tmp/显示中文标题sin曲线.png')
plt.show()

2. Scatterplot

data=np.load("F:\python\国民经济核算季度数据.npz",allow_pickle=True)
plt.scatter(values[:,0],values[:,2],marker='*')

Example 1
insert image description here

from matplotlib import pyplot as plt
## 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
plt.figure(figsize=(20,10),dpi=80)#设置窗口大小
y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
x_3=range(1,32)
x_10=range(51,82)
plt.scatter(x_3,y_3,label="3月份")#绘制散点图
plt.scatter(x_10,y_10,label="10月份")

_x=list(x_3)+list(x_10)
# _xticks_labels=["hello,{}".format(i) for i in _x]
_xticks_labels=["3月{}日".format(i) for i in x_3]
_xticks_labels+=["10月{}日".format(i-50) for i in x_10]
#取步长,数字和字符串一一对应,数据长度一样
plt.xticks(_x[::3],_xticks_labels[::3],rotation=45)

plt.xlabel("时间")
plt.ylabel("温度")
plt.title("温度变化")
plt.legend(loc="upper left")
plt.show()

Case 2
insert image description here

import numpy as np  #导入NumPy库
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data=np.load("F:\python\国民经济核算季度数据.npz",allow_pickle=True)
name = data['columns'] ## 提取其中的columns数组,视为数据的标签
values = data['values']## 提取其中的values数组,数据的存在位置
plt.figure(figsize=(9,9))
plt.scatter(values[:,0],values[:,2],marker='*')
## 绘制散点1
plt.scatter(values[:,0],values[:,3], marker='o',c='red')
## 绘制散点2
plt.scatter(values[:,0],values[:,4], marker='D',c='blue')
## 绘制散点3
plt.scatter(values[:,0],values[:,5], marker='v',c='yellow')
plt.xlabel("年份");plt.ylabel('生产总值(亿元)')
plt.ylim((0,225000))
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.legend(['总值','第一产业','第二产业','第三产业'])## 添加图例
plt.title("2000-2017各季度各产业国民生产值")
plt.show()

3. Bar chart

plt.bar(range(len(a)),b,width=0.3)#绘制条形图

Case 1: Horizontal Bar Chart

insert image description here

from matplotlib import pyplot as plt
## 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
plt.figure(figsize=(20,15),dpi=80)#设置窗口大小
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]
b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
#绘制横版条形图
plt.barh(range(len(a)),b,height=0.3,color="orange")
plt.yticks(range(len(a)),a,rotation=0)
plt.grid(alpha=0.3)
plt.show()

Case 2: Multiple Bar Charts

insert image description here

from matplotlib import pyplot as plt
## 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
plt.figure(figsize=(20,8),dpi=80)#设置窗口大小

a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]

bar_width=0.2
x_14=list(range(len(a)))
x_15=[i+bar_width for i in x_14] #x往右移
x_16=[i+bar_width*2 for i in x_14]
plt.bar(range(len(a)),b_14,width=bar_width,color="orange",label="9月14日")
plt.bar(x_15,b_15,width=bar_width,color="red",label="9月15日")
plt.bar(x_16,b_16,width=bar_width,color="cyan",label="9月16日")

plt.xticks(x_15,a,rotation=0)
plt.legend()
plt.grid(alpha=0.3)
plt.show()

Case 3: The last tick

insert image description here

from matplotlib import pyplot as plt
## 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
plt.figure(figsize=(20,15),dpi=80)#设置窗口大小
a = [0,5,10,15,20,25,30,35,40,45,60,90]
c = [5,5,5,5,5,5,5,5,5,15,30,60]
b = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]
_x=[i-0.5 for i in range(13)]
_xtick_labels=a+[150]#最后一个刻度:+[150]
plt.bar(range(len(a)),b,width=1)
plt.xticks(_x,_xtick_labels)
plt.grid(alpha=0.3)
plt.show()

4. Histogram

The data that can use the plt.hist method are those that have not been counted

insert image description here
insert image description here

plt.bar(range(3),values[-1,3:6],width = 0.5)  ## 绘制直方图
label = ['第一产业','第二产业','第三产业']      ## 刻度标签
plt.xticks(range(3),label)

Example 1 Frequency distribution histogram and frequency distribution histogram

from matplotlib import pyplot as plt
## 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
plt.figure(figsize=(20,8),dpi=80)#设置窗口大小
a=[131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99, 136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137,  92,121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94, 146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
#计算组数
d=3 #组距
num_bins=(max(a)-min(a))//d
#plt.hist(a,num_bins)#频数分布直方图
plt.hist(a,num_bins,normed=True)#频率分布直方图
#设置x轴的刻度
plt.xticks(range(min(a),max(a)+d,d))
plt.grid()
plt.show()

5. Pie chart

insert image description here

label= ['第一产业','第二产业','第三产业']## 定义饼状图的标签,标签是列表
plt.pie(values[-1,3:6],explode=explode,labels=label,autopct='%1.1f%%')## 绘制饼图
import numpy as np  #导入NumPy库
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data = np.load('F:\python\国民经济核算季度数据.npz',allow_pickle=True)
name = data['columns']## 提取其中的columns数组,视为数据的标签
values = data['values']## 提取其中的values数组,数据的存在位置
plt.figure(figsize=(6,6))## 将画布设定为正方形,则绘制的饼图是正圆
label= ['第一产业','第二产业','第三产业']## 定义饼状图的标签,标签是列表
explode = [0.01,0.01,0.01]## 设定各项离心n个半径
plt.pie(values[-1,3:6],explode=explode,labels=label,
        autopct='%1.1f%%')## 绘制饼图
plt.title('2017年第一季度各产业国民生产总值饼图')
plt.show()

6. Box plot

insert image description here

label= ['第一产业','第二产业','第三产业']## 定义标签
gdp = (list(values[:,3]),list(values[:,4]),list(values[:,5]))
plt.boxplot(gdp,notch=True,labels = label, meanline=True)
plt.title('2000-2017各产业国民生产总值箱线图')
plt.show()

Comprehensive case: histogram + pie chart

insert image description here

import numpy as np  #导入NumPy库
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data = np.load('F:\python\国民经济核算季度数据.npz',allow_pickle=True)
name = data['columns']## 提取其中的columns数组,视为数据的标签
values = data['values']## 提取其中的values数组,数据的存在位置
label= ['第一产业','第二产业','第三产业']## 定义标签
labe2=['农业','工业','建筑','批发','交通','餐饮','金融','房地产','其他']

#############绘制直方图
p1=plt.figure(figsize=(12,12))
#子图1
a1=p1.add_subplot(2,2,1)
plt.bar(range(3),values[0,3:6],width=0.5)
plt.xticks(range(3),label)
plt.xlabel('产业')
plt.ylabel('生产总值(亿元)')
plt.title('2000年第一季度国民生产总值产业构成分布直方图')
#子图2
a2=p1.add_subplot(2,2,2)
plt.bar(range(3),values[-1,3:6],width=0.5)
plt.xticks(range(3),label)
plt.xlabel('产业')
plt.ylabel('生产总值(亿元)')
plt.title('2017年第一季度国民生产总值产业构成分布直方图')
#子图3
a3=p1.add_subplot(2,2,3)
plt.bar(range(9),values[0,6:],width=0.5)
plt.xticks(range(9),labe2)
plt.xlabel('行业')
plt.ylabel('生产总值(亿元)')
plt.title('2000年第一季度国民生产总值行业构成分布直方图')
#子图4
a4=p1.add_subplot(2,2,4)
plt.bar(range(9),values[-1,6:],width=0.5)
plt.xticks(range(9),labe2)
plt.xlabel('行业')
plt.ylabel('生产总值(亿元)')
plt.title('2017年第一季度国民生产总值行业构成分布直方图')

###########绘制饼图
explode1 = [0.01,0.01,0.01]  #指定项距离饼图圆心为n个半径
explode2 = [0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01]
p = plt.figure(figsize=(12,12))
## 子图1
ax1 = p.add_subplot(2,2,1)
plt.pie(values[0,3:6],explode=explode1,labels=label,
        autopct='%1.1f%%')## 绘制散点图
plt.title('2000年第一季度国民生产总值产业构成分布饼图')
## 子图2
ax2 = p.add_subplot(2,2,2)
plt.pie(values[-1,3:6],explode=explode1,labels=label,
        autopct='%1.1f%%')## 绘制散点图
plt.title('2017年第一季度国民生产总值产业构成分布饼图')
## 子图3
ax3 = p.add_subplot(2,2,3)
plt.pie(values[0,6:],explode=explode2,labels=labe2,
        autopct='%1.1f%%')## 绘制散点图
plt.title('2000年第一季度国民生产总值行业构成分布饼图')## 添加图表标题
## 子图4
ax4 = p.add_subplot(2,2,4)
plt.pie(values[-1,6:],explode=explode2,labels=labe2,
        autopct='%1.1f%%')## 绘制散点图
plt.title('2017年第一季度国民生产总值行业构成分布饼图')## 添加图表标题
## 保存并显示图形

############绘制箱线图
gdp1 = (list(values[:,3]),list(values[:,4]),list(values[:,5]))
gdp2 = ([list(values[:,i]) for i in range(6,15)])
p = plt.figure(figsize=(8,8))
## 子图1
b1= p.add_subplot(2,1,1)
## 绘制箱线图
plt.boxplot(gdp1,notch=True,labels = label, meanline=True)
plt.title('2000-2017各产业国民生产总值箱线图')
plt.ylabel('生产总值(亿元)')## 添加y轴名称
## 子图2
b2 = p.add_subplot(2,1,2)
## 绘制箱线图
plt.boxplot(gdp2,notch=True,labels = labe2, meanline=True)
plt.title('2000-2017各行业国民生产总值箱线图')
plt.xlabel('行业')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.show()

Guess you like

Origin blog.csdn.net/Pireley/article/details/131332978