目录
Matplotlib
🥇Summary
获取源码?私信?关注?点赞?收藏?
Python数据可视化的由来主要是因为数据可视化在数据分析领域扮演了至关重要的角色。这是因为,数据可视化能够更好地向人们展示大量数据,为人们快速发现数据中的规律和异常提供了更好的途径。Python是一种功能强大的编程语言,提供了丰富的数据处理和可视化工具,因此也成为了数据可视化的常用工具之一。随着Python社区的不断发展,一些功能强大且易于使用的数据可视化库如Matplotlib、Seaborn、Plotly等也逐渐涌现出来,并成为Python数据可视化的主流工具。
Python 的 2D绘图库
Matplotlib
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 30)
#起始值,终止值,元素个数
plt.plot(x, np.sin(x));
plt.plot(x, np.sin(x), '-o');
# 颜色字符串有'c','m','y','r','g','b','w',和 k。分别表示青,红紫,黄,红,绿,白和黑。
# 线型字符串有:'-'为实线,'- -’为虚线,':'为点线,'-.'为点虚线,及'none’表示不用线型。
# 标记形式有'+','o','*',和'x',填入's'代表正方形,'d'代表菱形,'A'为上三角形,'v'为下三角形,’>’为右三角形,'<’为左三角形,'p’为五角星形,’h'为六角星形,none 为不用标记。
plt.plot(x, np.sin(x), 'r+');
plt.plot(x, np.sin(x), 'cd');
rng = np.random.RandomState(0)#rng(一个伪随机数生成器,即 np.random.RandomState() ),
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,
cmap='viridis')
plt.colorbar(); # 展示色阶
x = np.linspace(0, 10, 50)
dy = 0.8
y = np.sin(x) + dy * np.random.randn(50)
plt.errorbar(x, y, yerr=dy, fmt='.k')
x = [1,2,3,4,5,6,7,8]
y = [3,1,4,5,8,9,7,2]
label=['A','B','C','D','E','F','G','H']
plt.bar(x,y,tick_label = label);#plt.bar()方法用来画柱状图
plt.barh(x,y,tick_label = label);
data = np.random.randn(1000)
plt.hist(data);
x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)
kwargs = dict(alpha=0.3, bins=40, density = True)
plt.hist(x1, **kwargs);
plt.hist(x2, **kwargs);
plt.hist(x3, **kwargs);
x = np.linspace(0,10,100)
plt.plot(x,np.sin(x),'--');
x = np.linspace(0,10,100)
plt.plot(x, np.sin(x))
plt.ylim(-1.5, 1.5);
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)')
plt.xlabel('variable x');
plt.ylabel('value y');
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)')
plt.title('Trigonometric function');
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.grid()
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.axhline(y=0.8, ls='--', c='r')
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.text(3.2, 0, 'sin(x)', weight='bold', color='r');
x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.annotate('maximum',xy=(np.pi/2, 1),xytext=(np.pi/2+1, 1),
weight='bold',
color='r',
arrowprops=dict(arrowstyle='->', connectionstyle='arc3', color='r'));
x = np.linspace(0, 10, 1000)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), label='sin')
ax.plot(x, np.cos(x), '--', label='cos')
ax.legend();
ax.legend(loc='upper left', frameon=False);
fig
ax1 = plt.axes()
ax2 = plt.axes([0.65, 0.65, 0.2, 0.2])
for i in range(1, 7):
plt.subplot(2, 3, i)
plt.text(0.5, 0.5, str((2, 3, i)),fontsize=18, ha='center')
# 方法二
# fig = plt.figure()
# fig.subplots_adjust(hspace=0.4, wspace=0.4)
# for i in range(1, 7):
# ax = fig.add_subplot(2, 3, i)
# ax.text(0.5, 0.5, str((2, 3, i)),fontsize=18, ha='center')
for i in range(2):
for j in range(3):
ax[i, j].text(0.5, 0.5, str((i, j)), fontsize=18, ha='center')
fig
grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)
plt.subplot(grid[0, 0])
plt.subplot(grid[0, 1:])
plt.subplot(grid[1, :2])
plt.subplot(grid[1, 2]);
from mpl_toolkits import mplot3d
fig = plt.figure()
ax = plt.axes(projection='3d')
ax = plt.axes(projection='3d')
# Data for a three-dimensional line
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline);
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-10,10,50)#生成等差数列 从-10到10 一共50段
y1=2*x**3+7
y2=x**2+9
y3=x**3
y4=x**4+7
plt.figure(num=5,figsize=(8,5))#定义图像窗口大小
plt.plot(x,y2,color='pink',linewidth=1.0,linestyle='--')#3、画图
plt.plot(x,y1,color='blue',linewidth=2.0,linestyle='-')
plt.plot(x,y3,color='red',linewidth=3.0,linestyle='--')
plt.plot(x,y4,color='green',linewidth=4.0,linestyle='--')
#画四条曲线
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-3,3,50)#-3到3 分50段
y1=2*x+7
y2=x**2
plt.figure(num=5,figsize=(8,5))
plt.plot(x,y2)#默认样式
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
# plt.xlim(-1,2)#4、定义坐标轴范围 (-1,2)
# plt.ylim(-2,3)
plt.xlabel('this is x')#横轴名称
plt.ylabel('this is y')
plt.show()
# 画出直线 y = x-1, 线型为虚线,线宽为1,纵坐标范围(-2,1),横坐标范围(-1,2),横纵坐标在(0,0)坐标点相交。
# 横坐标的 [-1,-0.5,1] 分别对应 [bad, normal, good]。
import matplotlib.pyplot as plt
import numpy as np
y1=x-1
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
plt.xlim((-1, 2))#4、定义坐标轴范围
plt.ylim((-1, 2))
plt.xticks([-1,-0.5,1],[ r'$bad$', r'$normal$', r'$good$'])
ax = plt.gca()
ax.spines['right'].set_color('none')# 边框颜色
ax.spines['top'].set_color('none')
# ax.xaxis.set_ticks_position('top')# 刻度位置
ax.spines['bottom'].set_position(('data', 0))
# ax.yaxis.set_ticks_position('right')#y轴 方向位置 右
ax.spines['left'].set_position(('data',0))#边框 轴位置
plt.show()
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = 'SimHei'
#中文字体
plt.figure(num=5,figsize=(10,6))
x = np.linspace(-10, 10, 20)
y=x-1
l1=plt.plot(x, y, color='red', linewidth=1.0, linestyle='--',label='Straight line')#图例
plt.xlim((-1, 2))
plt.ylim((-1, 2))
plt.xticks([-2,0,3],[ r'$bad$', r'$normal$', r'$good$'])
#xticks 6、定义坐标轴刻度及名称
ax = plt.gca()
ax.spines['right'].set_color('none')# 边框颜色
ax.spines['top'].set_color('none')
# ax.xaxis.set_ticks_position('top')# 刻度位置
ax.spines['bottom'].set_position(('data', 0))
# ax.yaxis.set_ticks_position('right')#y轴 方向位置 右
ax.spines['left'].set_position(('data',0))#边框 轴位置(0,0)相交
plt.legend(loc='upper left')#图例位置 位于左上方
plt.plot(x,y)
#标注
x0 = 2
y0 = x0-1
plt.plot([x0, x0,], [0, y0,], 'k--', linewidth=0.5)#(2,0)(2,2-1)
##'k--'为线型选项,绘制黑色虚线
#(2,2-1)位置
# set dot styles
plt.scatter([x0, ], [y0, ], s=50, color='b')#圆的大小 颜色 点位置 s 大小 散点图
#plt.scatter 函数可以在图中画点,此时我们画的点为 (x0,y0), 点的大小(size)为 50, 点的颜色为蓝色(blue),可简写为 b。
#注释
plt.annotate(r'$x-1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30),
textcoords='offset points', fontsize=12,
arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))
#添加注释annotate,对(x0, y0)这个点进行标注。第一种方式就是利用函数 annotate(),其中 r'2x+1=' %y0 代表标注的内容,
#可以通过字符串 %s 将 y0 的值传入字符串;参数xycoords='data' 是说基于数据的值来选位置, xytext=(+30, -30) 和
#textcoords='offset points' 表示对于标注位置的描述 和 xy 偏差值,即标注位置是 xy 位置向右移动 30,向下移动30, (指示曲线弧度)
#arrowprops是对图中箭头类型和箭头弧度的设置,需要用 dict 形式传入。
#注释2
plt.text(-1.5, 1, r'$Our\ life\ will\ be\ both\ promissing\ and\ rosy. 特殊字符:\mu_n\ \sigma_i\ \alpha_t$',
fontdict={'size': 12, 'color': 'r'})
# 上1.左1.5
import matplotlib.pyplot as plt
import numpy as np
n = 12
X = np.arange(n)#生成数组 默认0-11
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 3.0, n)#
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
plt.bar(X, +Y1)#bar 函数 柱状图
plt.bar(X, -Y2)
plt.xlim(-.5, n)
plt.xticks(())
plt.ylim(-1.25, 1.25)
plt.yticks(())
plt.show()
plt.bar(X, +Y1, facecolor='#FFCCCC', edgecolor='white')# 前景色 边框颜色
plt.bar(X, -Y2, facecolor='#6699CC', edgecolor='white')
for x, y in zip(X, Y1):
# ha: horizontal alignment
# va: vertical alignment
plt.text(x, y , '%.2f' % y, ha='center', va='bottom')
for x, y in zip(X, Y2):
# ha: horizontal alignment
# va: vertical alignment
plt.text(x, -y , '%.2f' % y, ha='center', va='top')
#用%.2f保留两位小数,用ha='center'设置横向居中对齐,用va='bottom'设置纵向底部(顶部)对齐。
#如果想要改变柱状图的颜色,并且每个柱形上方能够显示该项数值我们可以用 plt.bar 函数中的facecolor参数设置柱状图主体颜色,
#用edgecolor参数设置边框颜色;而函数 plt.text 可以帮助我们在柱体上方(下方)加上数值:用%.2f保留两位小数,用ha='center'设置横向居中对齐,
#用va='bottom'设置纵向底部(顶部)对齐。
plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.RdBu)
C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidths=.5)
plt.clabel(C, inline=True, fontsize=10)
plt.text(0.7, 0, r'$\pi$',
fontdict={'size': 30, 'color': 'r'})
plt.xticks(())
plt.yticks(())
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)#随机值生成器
# example data
mu = 100 # mean of distribution
sigma = 15 # standard deviation of distribution
x = mu + sigma * np.random.randn(437)
num_bins = 50
fig, ax = plt.subplots()
# the histogram of the data
n, bins, patches = ax.hist(x, num_bins, density=1)
# add a 'best fit' line
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) *
np.exp(-0.5 * (1 / sigma * (bins - mu))**2))
ax.plot(bins, y, '--')
ax.set_xlabel('Smarts')
ax.set_ylabel('Probability density')
ax.set_title(r'Histogram of IQ: $\mu=100$, $\sigma=15$')
# Tweak spacing to prevent clipping of ylabel
fig.tight_layout()
plt.show()
"""
直方图与柱状图外观表现很相似,用来展现连续型数据分布特征的统计图形(柱状图主要展现离散型数据分布)。
函数:matplotlib.pyplot.hist(x,bins=None,range=None, density=None, bottom=None, histtype='bar', align='mid', log=False, color=None, label=None, stacked=False, normed=None)
关键参数
x: 数据集,最终的直方图将对数据集进行统计
bins: 统计的区间分布
range: tuple, 显示的区间,range在没有给出bins时失效
density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
align: 可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
log: bool,默认False,即y坐标轴是否选择指数刻度
stacked: bool,默认为False,是否为堆积状图
"""
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams["font.sans-serif"] = ["KaiTi"]
mpl.rcParams["axes.unicode_minus"] = False
mu = 60.0
sigma = 2.0
x = mu + sigma*np.random.randn(500)
bins = 50
fig, ax = plt.subplots(1, 1)
n, bins, patches = ax.hist(x, bins, density=True, histtype="bar", facecolor="#99FF33", edgecolor="#00FF99", alpha=0.75)
y = ((1/(np.power(2*np.pi, 0.5)*sigma))*np.exp(-0.5*np.power((bins-mu)/sigma, 2)))
ax.plot(bins, y, color="#7744FF", ls="--", lw=2)
ax.grid(ls=":", lw=1, color="gray", alpha=0.2)
ax.text(54, 0.2, r"$y=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$", {"color":"#FF5511", "fontsize":20})
ax.set_xlabel("体重")
ax.set_ylabel("概率密度")
ax.set_title(r"体重的直方图:$\mu=60.0$, $\sigma=2.0$", fontsize=16)
plt.show()
#patches模块中的各种形状
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.path as mpath
import matplotlib.lines as mlines
import matplotlib.patches as mpatches
from matplotlib.collections import PatchCollection
#定义函数,给每一个patch都设置标签说明
def label(xy, text):
y = xy[1] - 0.15 # 标签放置在patch下方的0.15位置处
plt.text(xy[0], y, text, ha="center", family='sans-serif', size=14)
fig, ax = plt.subplots()
# 创建一个3x3的网格
grid = np.mgrid[0.2:0.8:3j, 0.2:0.8:3j].reshape(2, -1).T
#创建容纳patch的集合
patches = []
# 添加一个圆Circle
circle = mpatches.Circle(grid[0], 0.1, ec="none")
patches.append(circle)
label(grid[0], "Circle")
# 添加一个Rectangle
rect = mpatches.Rectangle(grid[1] - [0.025, 0.05], 0.05, 0.1, ec="none")
patches.append(rect)
label(grid[1], "Rectangle")
# 添加一个楔形,即圆的一部分
wedge = mpatches.Wedge(grid[2], 0.1, 30, 270, ec="none")
patches.append(wedge)
label(grid[2], "Wedge")
# 添加一多边形,这里添加一个五边形
polygon = mpatches.RegularPolygon(grid[3], 5, 0.1)
patches.append(polygon)
label(grid[3], "Polygon")
# 添加一个椭圆,也可以使用Arc
ellipse = mpatches.Ellipse(grid[4], 0.2, 0.1)
patches.append(ellipse)
label(grid[4], "Ellipse")
# 添加一个箭头
arrow = mpatches.Arrow(grid[5, 0] - 0.05, grid[5, 1] - 0.05, 0.1, 0.1,
width=0.1)
patches.append(arrow)
label(grid[5], "Arrow")
# 添加一个路径path,路径的详细解释后面会讲到,相比于简单的patch,稍显复杂
#自定义形状 自定义 !!!!
Path = mpath.Path
path_data = [
(Path.MOVETO, [0, 0]),
(Path.LINETO, [1, 0]),
(Path.LINETO, [1, 1]),
(Path.LINETO, [2, 1]),
(Path.LINETO, [1.5, 2]),
(Path.LINETO, [2, 2]),
(Path.LINETO, [0.5, 3]),
(Path.LINETO, [-1, 2]),
(Path.LINETO, [-0.5, 2]),
(Path.LINETO, [-1, 1]),
(Path.LINETO, [0, 1]),
(Path.CLOSEPOLY, [0, 0])]
codes, verts = zip(*path_data)
path = mpath.Path(verts + grid[6], codes)
patch = mpatches.PathPatch(path)
patches.append(patch)
label(grid[6], "PathPatch")
# 添加一个box
fancybox = mpatches.FancyBboxPatch(
grid[7] - [0.025, 0.05], 0.05, 0.1,
boxstyle=mpatches.BoxStyle("Round", pad=0.02))
patches.append(fancybox)
label(grid[7], "FancyBboxPatch")
# 添加一条折线——注意这里的折线和前面所画的这显示不一样的,这里的折线是一个形状
x, y = np.array([[-0.06, 0.0, 0.1], [0.05, -0.05, 0.05]])
line = mlines.Line2D(x + grid[8, 0], y + grid[8, 1], lw=5., alpha=0.3)
label(grid[8], "Line2D")
colors = np.linspace(0, 1, len(patches))
#将patch集合包装成PatchCollection
collection = PatchCollection(patches, cmap=plt.cm.hsv, alpha=0.3)
collection.set_array(np.array(colors))
#将PatchCollection添加给axes对象
ax.add_collection(collection)
#将折线添加到axes对象
ax.add_line(line)
plt.axis('equal')
plt.axis('off')
plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#将图表内容字体设置为黑体,可以正常显示中文
ratios=[0.1,0.1,0.15,0.15,0.2]#存放比例列表
colors=['peru','coral','salmon','yellow','grey']#存放颜色列表,与比例相匹配
labels=["流行",'classic','pop','纯音乐','blue']#存放各类元素标签
explode=(0,0.1,0,0,0.08)
plt.pie(ratios,explode=explode,colors=colors,labels=labels)#绘制饼图
plt.title('歌单音乐种类百分比')
plt.axis('equal')#将饼图显示为正圆形
plt.show()
'''
使用plt.subplot2grid来创建第2个小图, (3,3)表示将整个图像窗口分成3行3列, (1,0)表示从第1行第0列开始作图,colspan=2表示列的跨度为2. 同上画出 ax3,
(1,2)表示从第1行第2列开始作图,rowspan=2表示行的跨度为2. 再画一个 ax4 和 ax5, 使用默认 colspan, rowspan。使用ax4.scatter创建一个散点图,
使用 ax4.setxlabel 和 ax4.setylabel 来对x轴和y轴命名。这样,我们就通过 subplot2grid() 完成了一张不均匀图中图。 细心的小伙伴可能可以注意到,
在第一章我们设置标题与坐标轴时,使用的是plt.title()这样的语句,针对小图 ax ,我们的设置前都要加上 'set'。
'''
plt.figure(figsize=(15, 15))
ax1 = plt.subplot2grid((5, 5), (0, 0), colspan=4)
ax1.plot([1, 2], [1, 3]) # 画小图
ax1.set_title('ax1_title') # 设置小图的标题
ax2 = plt.subplot2grid((5, 5), (1, 0), colspan=2)
ax2.plot([0, 0], [1, 3],'green') # 画小图
ax2.set_title('ax2_title') # 设置小图的标题
ax3 = plt.subplot2grid((5, 5), (1, 2), rowspan=2)
ax3.plot([0, 0.8], [2, 6]) # 画小图
ax3.set_title('ax3_title') # 设置小图的标题
ax4 = plt.subplot2grid((5, 5), (2, 0))
ax4.plot([3, 3], [2, 6],'black') # 画小图
ax4.set_title('ax4_title') # 设置小图的标题
ax5 = plt.subplot2grid((5, 5), (2, 1))
ax5.plot([1, 3], [-1, 6]) # 画小图
ax5.set_title('ax4_title') # 设置小图的标题
ax5.scatter([1, 2], [2, 2],[3,6])
ax5.set_xlabel('ax4_x')
ax5.set_ylabel('ax4_y')
ax6 = plt.subplot2grid((5, 5), (3, 0))
ax6.plot([0, 5], [6, 1]) # 画小图
ax6.set_title('ax6_title') # 设置小图的标题
ax7 = plt.subplot2grid((5, 5), (3, 1), colspan=2)
ax7.plot([0, 0.8], [2, 6],'red') # 画小图
ax7.set_title('ax7_title') # 设置小图的标题
ax8 = plt.subplot2grid((5, 5), (1, 3), rowspan=3)
ax8.plot([0, 0.8], [2, 6]) # 画小图
ax8.set_title('ax8_title') # 设置小图的标题
#水果柱状图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
###
raw_data = {'水果': ['香蕉', '苹果', '草莓'],
'价格': [2,4,10],
'数量': [5,3,6],}
df = pd.DataFrame(raw_data)
pos = list(range(len(df['水果'])))
width = 0.25
plt.bar([p - width/2 for p in pos], df['价格'], width, color='#FFCCCC')
plt.bar([p + width/2 for p in pos], df['数量'], width, color='#6699CC')
plt.xticks(np.linspace(0, 2, 3),df['水果'])
plt.legend(['价格', '数量'], loc='upper left')
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 3, 4, 2, 5, 8, 6]
#小图
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8#小图位置
fig = plt.figure()
#大图
ax1 = fig.add_axes([left, bottom, width, height])
ax1.plot(x, y, 'r')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title')
#图中图
left, bottom, width, height = 0.2, 0.6, 0.25, 0.25
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(y, x, 'b')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_title('title inside 1')
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
f, (ax11, ax12, ax13) = plt.subplots(1, 3, sharex=True, sharey=True)
#一行三列
x=np.linspace(-5,5,20)#等差数列
y1=x
y2=x**2
y3=0.01*x-0.01
ax11.plot(x,y2,color='pink',linewidth=2.0,linestyle='--')
ax11.set_xlabel('X data',color='g')
ax11.set_ylabel('Y data',color='g')
ax12.plot(x,y1,color='blue',linewidth=2.0,linestyle='--')
ax13.plot(x,y3,color='red',linewidth=2.0,linestyle='--')
plt.rcParams['font.sans-serif']=['SimHei']#将图表内容字体设置为黑体,可以正常显示中文
x = np.arange(-10, 10, 1)
y1 = x
y2 = x**2
y3 = 0.01 * x-0.01
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax3 = ax1.twinx()
ax1.plot(x, y1, 'g-') # green, solid line
ax1.set_xlabel('X data')
ax1.set_ylabel('Y1 data', color='g')
ax2.plot(x, y2, 'b-') # blue
ax2.set_ylabel('Y2 data', color='b')
ax3.plot(x, y3, 'r-') # blue
ax3.set_ylabel('Y3 data', color='r')
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#将图表内容字体设置为黑体,可以正常显示中文
y1 = x
y2 = x**2
y3 = 0.01 * x-0.01
#大图
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
fig = plt.figure()
ax1 = fig.add_axes([left, bottom, width, height])
ax1.plot(x, y1, 'r')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title')
left, bottom, width, height = 0.2, 0.6, 0.25, 0.25
#小图位置 图框宽度高度
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(x, y2, 'b')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_title('title inside 1')
left, bottom, width, height = 0.6, 0.2, 0.25, 0.4
#小图位置 图框宽度高度
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(x, y3, 'b')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_title('title inside 1')
#一个大图,中包含两个小图
🥇Summary
上述内容就是此次 【python数据可视化】Matplotlib绘图练习(一) 的全部内容了,感谢大家的支持,相信在很多方面存在着不足乃至错误,希望可以得到大家的指正。🙇(ง •_•)ง
调整自己。不忘来时路,努力前行,找到前进的方向。
2023年第四十一期,希望得到大家的喜欢🙇
希望大家有好的意见或者建议,欢迎私信,一起加油
以上就是本篇文章的全部内容了
~ 关注我,点赞博文~ 每天带你涨知识!
1.看到这里了就 [点赞+好评+收藏] 三连 支持下吧,你的「点赞,好评,收藏」是我创作的动力。
2.关注我 ~ 每天带你学习 :各种前端插件、3D炫酷效果、图片展示、文字效果、以及整站模板 、HTML模板 、C++、数据结构、Python程序设计、Java程序设计、爬虫等! 「在这里有好多 开发者,一起探讨 前端 开发 知识,互相学习」!
3.以上内容技术相关问题可以相互学习,可 关 注 ↓公 Z 号 获取更多源码 !
获取源码?私信?关注?点赞?收藏?
👍+✏️+⭐️+🙇