几个Matplotlib 画图的例子
#例1 简单画图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
xpoints = np.arange(0,2*np.pi,1e-1)
ypoints = np.sin(xpoints)
plt.figure(dpi=100)
plt.scatter(xpoints, ypoints)
plt.xlim([0,2*np.pi])
plt.ylim([-1,1])
plt.xlabel('自变量')
plt.ylabel('函数值')
plt.title('正弦函数')
locs, labels = plt.xticks()
plt.xticks(locs,['第一','第二','第三','第四','第五','第六','第七','第八'],color='blue',rotation=20)
#例2 不规则子图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
#定义好横纵坐标数据
x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)
plt.figure(dpi=200)
ax1=plt.subplot(1, 2, 1)
ax1.plot(x1, y1, color='tab:blue')
ax1.plot(x2, y2, color='tab:orange')
ax3=plt.subplot(2, 2, 2)
ax3.plot(x2, y2, color='tab:orange')
ax2=plt.subplot(2, 2, 4)
ax2.plot(x1, y1, color='tab:blue')
#例3
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(dpi=200,figsize=(6,6))
x, y = np.arange(-4, 5), np.arange(-4,5)
plt.xticks(x)
plt.yticks(y)
plt.xlabel("x_axis")
plt.ylabel("y_axis")
# 等高线的x、y坐标
X, Y = np.meshgrid(np.linspace(-4, 4, 50), np.linspace(-4, 4, 50))
# 等高线为一个圆
Z = X ** 2 + Y ** 3
# 画出高度为2、5、8、10的等高线
C = plt.contour(X, Y, Z, levels=[-3,-1,3, 5, 8, 12])
plt.clabel(C, inline=False, fontsize=15)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-5,6,0.2)
y = np.arange(0,21,0.2)
xx,yy = np.meshgrid(x,y)
z = np.square(xx) - yy
plt.figure(dpi=200)
# plt.scatter(xx,yy,c=z,s=30,edgecolors='black',alpha=0.9)
plt.contourf(xx,yy,z,cmap='Blues')
plt.show()
#例4 来源于网络,如侵权,立刻删除
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
def two_bar(data1,data2,xticks):
length = len(data1)
x = np.arange(length) # 横坐标范围
plt.figure(dpi=200)
total_width, n = 0.8, 2 # 柱状图总宽度,有几组数据
width = total_width / n # 单个柱状图的宽度
x1 = x - width/2 # 第一组数据柱状图横坐标起始位置
x2 = x + width/2 # 第二组数据柱状图横坐标起始位置
plt.bar(x1, data1, width=width, label="小s吃糖数")
plt.bar(x2, data2, width=width, label="小y吃糖数")
for a, b in zip(x1, data1):
plt.text(a, b + 0.1, '%.0f' % b, ha='center', va='bottom', fontsize=7)
for a, b in zip(x2, data2):
plt.text(a, b + 0.1, '%.0f' % b, ha='center', va='bottom', fontsize=7)
# for a, b, c in zip(x1, data1,data1/(data1+data2)):
# plt.text(a, b + 0.1, '%.2f' % c, ha='center', va='bottom', fontsize=7)
# for a, b, c in zip(x2, data2, data2/(data1+data2)):
# plt.text(a, b + 0.1, '%.2f' % c, ha='center', va='bottom', fontsize=7)
plt.title("一周每天吃悠哈软糖颗数柱状图") # 柱状图标题
plt.xlabel("星期") # 横坐标label 此处可以不添加
plt.ylabel("吃悠哈软糖颗数(个)") # 纵坐标label
plt.xticks(x, xticks,rotation=0) # 用星期几替换横坐标x的值
plt.legend() # 给出图例
plt.show()
if __name__ == '__main__':
data1 = np.array([5, 2, 1, 1, 8, 1, 6]) # 柱状图第一组数据
data2 = np.array([9, 5, 1, 2, 9, 2, 1]) # 柱状图第二组数据
xticks= ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]
two_bar(data1,data2,xticks)
#例5 双坐标
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 1 17:06:57 2022
@author: Administrator
"""
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['KaiTi']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
def double_y_axis(data1,data2,xticks):
x=list(range(len(data1)))
fig, ax1 = plt.subplots(dpi=500)
# 颜色代码: #7199cf,#4fc4aa
bars=ax1.bar(x,data1, color='#7199cf',label="出货量")
ax1.set_xlabel("月份")
ax1.set_ylabel("出货量(吨)")
plt.xticks(x,xticks,rotation=45)
colors=[ '#7199cf','#4fc4aa','#e1a7a2','#7199cf','#4fc4aa',
'#e1a7a2','#7199cf','#4fc4aa','#e1a7a2','#7199cf','#4fc4aa','#e1a7a2']
for bar, color in zip(bars, colors): #给每个bar分配指定的颜色
bar.set_color(color)
ax2 = ax1.twinx() #用于创建和返回共享x轴的第二个轴
ax2.plot(data2, 'ro--',label="环比增长")
ax2.set_ylabel("环比增长")
fig.legend(loc="upper right")
plt.show()
if __name__ == '__main__':
data1=np.random.randint(100,1000,12)
data2=[0]
for i in range(1,len(data1)):
data2.append((data1[i]-data1[i-1])/data1[i-1])
xticks=["2019-01", "2019-02", "2019-03", "2019-04", "2019-05", "2019-06",
"2019-07", "2019-08", "2019-09", "2019-10", "2019-11", "2019-12"]
double_y_axis(data1,data2,xticks)