0


一网打尽Matplotlib Pyplot画图(pycharm版)

pyplot是Matplotlib的子库,提供了和Matlib类似的接口,能很方便用户绘制2D图表。

Pyplot 包含一系列绘图的相关函数,每个函数根据数据绘画出对应图像,也可以对当前的图像进行一些修改,例如:给图像加上标记,生新的图像,在图像中产生新的绘图区域等等。

首先使用import 导入pyplot库,并给出一个方便引用的别名plt.

import matplotlib.pyplot as plt

常用的绘图函数包括:

  • plot():用于绘制线图和散点图
  • scatter():用于绘制散点图
  • bar():用于绘制垂直条形图和水平条形图
  • hist():用于绘制直方图
  • pie():用于绘制饼图

除了这些基本的函数,pyplot 还提供了很多其他的函数,例如用于设置图表属性的函数、用于添加文本和注释的函数、用于保存图表到文件的函数等等。

在画图过程中报错,如AttributeError: module 'backend_interagg' has no attribute 'FigureCanvas'

导入

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt

画图可能出现中文乱码

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 20})

1.直线,折线,曲线,散点图

import matplotlib.pyplot as plt
import numpy as np

xpoints = np.array([0, 7])
ypoints = np.array([0, 60])

plt.plot(xpoints, ypoints)
plt.show()

如果只想绘制两个坐标点,可以使用 o 参数,表示一个实心圈的标记。

即用plt.plot(xpoints, ypoints, 'o')替换plt.plot(xpoints, ypoints)

如果绘制一条不规则线,坐标为 (1, 6) 、 (2, 3) 、(4, 7) 、(5, 0),对应的两个数组为:[1, 2, 3, 4] 与 [6, 3, 7, 0]。

x = np.array([1, 2, 3, 4])
y = np.array( [6, 3, 7, 0])
plt.plot(x, y,linestyle='--',marker='o')#‘--’表示虚线   绘图标记 marker='o'
plt.show()

标记符号描述"."
m00
点","
m01
像素点"o"
m02
实心圆"v"
m03
下三角"^"
m04
上三角"<"
m05
左三角">"
m06
右三角"1"
m07
下三叉"2"
m08
上三叉"3"
m09
左三叉"4"
m10
右三叉"8"
m11
八角形"s"
m12
正方形"p"
m13
五边形"P"
m23
加号(填充)""
m14
星号"h"
m15
六边形 1"H"
m16
六边形 2"+"
m17
加号"x"
m18
乘号 x"X"
m24
乘号 x (填充)"D"
m19
菱形"d"
m20
瘦菱形"|"
m21
竖线"_"
m22
横线0 (TICKLEFT)
m25
左横线1 (TICKRIGHT)
m26
右横线2 (TICKUP)
m27
上竖线3 (TICKDOWN)
m28
下竖线4 (CARETLEFT)
m29
左箭头5 (CARETRIGHT)
m30
右箭头6 (CARETUP)
m31
上箭头7 (CARETDOWN)
m32
下箭头8 (CARETLEFTBASE)
m33
左箭头 (中间点为基准)9 (CARETRIGHTBASE)
m34
右箭头 (中间点为基准)10 (CARETUPBASE)
m35
上箭头 (中间点为基准)11 (CARETDOWNBASE)
m36
下箭头 (中间点为基准)"None", " " or ""没有任何标记'$...$'
m37
渲染指定的字符。例如 "$f$" 以字母 f 为标记。
绘制一个正弦和余弦图,在 plt.plot() 参数中包含两对 x,y 值,第一对是
* x,y**,这对应于正弦函数,第二对是 x,z,这对应于余弦函数。

x1 = np.linspace(0, 15, 100)
y1 = np.sin(x1)
y2 = np.cos(x1)

plt.plot(x1, y1, color="blue", linewidth=2,linestyle='--')
plt.plot(x1, y2, color="red", linewidth=2,linestyle='-.')

linestyle的类型: '-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'

网格线

x = np.array([1, 2, 3, 4])
y = np.array( [6, 3, 7, 0])
plt.title("X-Y")#标题
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.plot(x, y,linestyle='--',marker='o',color='green')#‘--’表示虚线
plt.grid(color = 'r', linestyle = '-.', linewidth = 0.5)
plt.show()

Matplotlib 绘制多图
subplot(nrows, ncols, index, **kwargs) 图的个数=nrows* ncols 当前为index图。

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 10})

#plot 1:
x = np.array([1, 2, 3, 4])
y = np.array( [6, 3, 7, 0])

plt.subplot(1, 2, 1)
plt.title("X-Y")
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.plot(x, y,linestyle='--',marker='o',color='green')#‘--’表示虚线
plt.grid(color = 'r', linestyle = '-.', linewidth = 0.5)
plt.title("plot 1")

#plot 2:
x1 = np.linspace(0, 15, 100)
y1 = np.sin(x1)
y2 = np.cos(x1)

plt.subplot(1, 2, 2)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.plot(x1, y1, color="blue", linewidth=2,linestyle='--')
plt.plot(x1, y2, color="red", linewidth=2,linestyle='dashdot')
plt.title("plot 2")

plt.suptitle("RUNOOB subplot Test")
plt.show()

散点图

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)

x,y为输入数据,

s为散点的大小,

c颜色,

marker同上讲解,

norm数据颜色亮度(0,1)

, vmin=None, vmax=None数据亮度设置,norm存在时,忽略

alpha::透明度设置,0-1 之间,默认 None,即不透明。

linewidths:标记点的长度。

edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 10})

x = np.array([1, 2, 3, 4,  5, 6,  7,  8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18,12,23,14,15,1, 23, 21,11,6, 13,3])
sizes = np.array([20,50,100,200,500,1000,60,90,20,50,100,200,500,1000,60,90,100,200,500])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta","red","green","black","orange"
                      ,"purple","beige","cyan","magenta","purple","beige","cyan"])
plt.title("RUNOOB Scatter Test")
plt.scatter(x, y,s=sizes,c=colors,alpha=0.4)
plt.show()
除了手动设置颜色,还可以通过颜色带设置,设置颜色条需要使用 cmap 参数,默认值为 'viridis',之后颜色值设置为 0 到 100 的数组。

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 10})
import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4,  5, 6,  7,  8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18,12,23,14,15,1, 23, 21,11,6, 13,3])
sizes = np.array([20,50,100,200,500,1000,60,90,20,50,100,200,500,1000,60,90,100,200,500])
colors = np.array([0,5,10,15,20,25,30,35,40,45,50,55,60,60,70,75,80,90,100])

plt.scatter(x, y, c=colors, cmap='afmhot_r',s=sizes,alpha=0.6)
plt.colorbar()#显示颜色条
plt.show()

其他的颜色带自查,举个栗子:
BluesBlues_rGreensGreens_rRedsReds_r

2.柱状图

plt.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

x:浮点型数组,柱形图的 x 轴数据。

height:浮点型数组,柱形图的高度。

width:浮点型数组,柱形图的宽度。

bottom:浮点型数组,底座的 y 坐标,默认 0。

align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。

**kwargs::其他参数。

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 10})

import matplotlib.pyplot as plt
import numpy as np

x = np.array(["bar-1", "bar-2", "bar-3", "bar-4"])
y = np.array([12, 22, 6, 18])

plt.bar(x, y,  width=0.5,color = ["#4C5050","red","pink","#688B2F"],align='edge')
plt.show()

只要将plt.bar()改成plt.barh(),width改成height即可。

3.饼图

plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]

  • x:浮点型数组或列表,用来绘制饼图的数据,表示每个扇形的面积。
  • explode:数组,表示各个扇形之间的间隔,默认值为0。
  • labels:列表,各个扇形的标签,默认值为 None。
  • colors:数组,表示各个扇形的颜色,默认值为 None。
  • autopct:设置饼图内各个扇形百分比显示格式,**%d%%** 整数百分比,**%0.1f** 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
  • labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
  • pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
  • shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
  • radius::设置饼图的半径,默认为 1。
  • startangle::用于指定饼图的起始角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
  • counterclock:布尔值,用于指定是否逆时针绘制扇形
  • 默认为 True,即逆时针绘制,False 为顺时针。
  • wedgeprops :字典类型,默认值 None。用于指定扇形的属性,比如边框线颜色、边框线宽度等。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。
  • textprops :字典类型,用于指定文本标签的属性,比如字体大小、字体颜色等,默认值为 None。
  • center :浮点类型的列表,用于指定饼图的中心位置,默认值:(0,0)。
  • frame :布尔类型,用于指定是否绘制饼图的边框,默认值:False。如果是 True,绘制带有表的轴框架。
  • rotatelabels :布尔类型,用于指定是否旋转文本标签,默认为 False。如果为 True,旋转每个 label 到指定的角度。
  • data:用于指定数据。如果设置了 data 参数,则可以直接使用数据框中的列作为 x、labels 等参数的值,无需再次传递。
  • import matplotlibmatplotlib.use('TkAgg') # 必须在导入 matplotlib.pyplot 之前设置import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.rcParams.update({'font.size': 10})y = np.array([35, 25, 25, 15])plt.pie(y, labels=['A','B','C','D'], # 设置饼图标签 colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色 explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远 autopct='%.2f%%', # 格式化输出百分比 shadow=True, #阴影 startangle=90 )plt.title("Pie Test")plt.show()

4.双纵轴图

fig, ax1 =plt.subplots()                               #####这句
plt.title("数据期间cart,fav,buy行为汇总分布")
ax1.plot(x, groupby_pv,linestyle='-',marker='o',color='red',label='pv')
ax1.set_ylabel('pv')
ax1.legend()
ax2 = ax1.twinx()                  # twinx将ax1的X轴共用与ax2,这步很重要
ax2.plot(x, groupby_cart,linestyle='-',marker='1',color='yellow',label="cart")
ax2.plot(x, groupby_fav,linestyle='-.',marker='2',color='blue',label='fav')
ax2.plot(x, groupby_buy,linestyle='solid',marker='3',color='pink',label='buy')
ax2.set_ylabel('cart,fav,buy')
# 添加图例
ax2.legend()
plt.show()

fig, ax1 = plt.subplots()
plt.xticks(rotation=45)
ax1.bar(x, groupby_pv, color="blue", alpha=0.5, label="pv")
ax1.set_xlabel("月份")
ax1.set_ylabel("pv次数")
ax2 = ax1.twinx()
ax2.plot(x, groupby_fav,linestyle='-.',marker='2',color='blue',label='fav')
ax2.plot(x, groupby_buy,linestyle='solid',marker='3',color='pink',label='buy')
ax2.set_ylabel('cart,fav,buy')

fig.legend(loc="upper right", bbox_to_anchor=(1, 1), bbox_transform=ax1.transAxes)
plt.show()

5.直方图

plt.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, **kwargs)

  • x:绘制直方图的数据,一个一维数组或列表。
  • bins:可选参数,表示直方图的箱数。默认为10。
  • range:表示直方图的值域范围,可以是一个二元组或列表。默认为None,即使用数据中的最小值和最大值。
  • density:表示是否将直方图归一化。默认为False,即直方图的高度为每个箱子内的样本数,而不是频率或概率密度。
  • weights:表示每个数据点的权重。默认为None。
  • cumulative:表示是否绘制累积分布图。默认为False。
  • bottom:表示直方图的起始高度。默认为None。
  • histtype:表示直方图的类型,可以是'bar'、'barstacked'、'step'、'stepfilled'等。默认为'bar'。
  • align:表示直方图箱子的对齐方式,可以是'left'、'mid'、'right'。默认为'mid'。
  • orientation:表示直方图的方向,可以是'vertical'、'horizontal'。默认为'vertical'。
  • rwidth:表示每个箱子的宽度。默认为None。
  • log:表示是否在y轴上使用对数刻度。默认为False。
  • color:表示直方图的颜色。
  • label:表示直方图的标签。
  • stacked:表示是否堆叠不同的直方图。默认为False。
  • **kwargs:可选参数,表示其他绘图参数
  • import matplotlibmatplotlib.use('TkAgg') # 必须在导入 matplotlib.pyplot 之前设置import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.rcParams.update({'font.size': 10})import matplotlib.pyplot as pltimport numpy as np# 生成一组随机数据data = np.random.randn(100)# 绘制直方图plt.hist(data, bins=10, width=0.5,color='blue', alpha=0.8)# 设置图表属性plt.title('hist() Test')plt.xlabel('Value')plt.ylabel('Frequency')# 显示图表plt.show()
标签: matplotlib pycharm

本文转载自: https://blog.csdn.net/qq_57867224/article/details/141505334
版权归原作者 qq_57867224 所有, 如有侵权,请联系我们删除。

“一网打尽Matplotlib Pyplot画图(pycharm版)”的评论:

还没有评论