Python绘图笔记

本文介绍了Python数据可视化的基本方法,包括设置汉字字体、绘制折线图、连续函数图像、柱状图、极坐标图形、隐函数图像和三维图形,并提供了详细的代码示例,涵盖了matplotlib和sympy库的使用。
摘要由CSDN通过智能技术生成

写在前面:

这是本人学习python绘图所做笔记,具体内容参考CSDN博客、菜鸟教程、知乎等,特别感谢某位低调学长在我Vscode莫名装不好库时所提供的巨大帮助。

零、关于字体

  1. 欲设置汉字,需要引入:
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False

其中’SimHei’代表黑体

'SimSun’代表宋体

一、折线图的绘制

  1. 首先以列表或元组的形式设置横纵坐标,如:
x=["8.17","8.24","8.31","9.7","9.14","9.21","9.28"]
Americas=[150.7234,162.3891,148.1995,176.3048,146.2450,138.6267,127.3971]
Europe=[113.4516,116.5092,117.2461,114.6065,111.3722,109.0667,109.7735]
SouthEast_Asia=[73.1279,61.4080,59.6456,54.3013,45.3539,38.3053,34.4305]
Western_Pacific=[42.9153,51.3581,55.3344,53.1922,48.7586,46.1979,37.8919]
  1. 使用plot函数进行绘制,格式:
plt.plot(x,y,label="xxx",color='r',marker='+')

其中第一个参数x为横坐标值,第二个参数y为纵坐标对应值,第三个参数label="xxx"表示标签名称(可省略),第四个参数color表示线的颜色(省略即为默认),第五个参数marker表示每个点的形状(省略即为默认),具体例子如下:

plt.plot(x,Americas,label="美洲",color="r",marker="+")
plt.plot(x,Europe,label="欧洲",color='y',marker=".")
plt.plot(x,SouthEast_Asia,label="东南亚",color='g',marker="^")
plt.plot(x,Western_Pacific,label="大洋洲",color='b',marker="p")#分别绘制四个地区
  1. 图表美化相关:

设置图标题,如:

plt.title("新冠肺炎确诊情况")

设置x轴标签,如:

plt.xlabel("日期")

设置y轴标签,如:

plt.ylabel("新增确诊人数/万人")

设置纵轴上下限,如:

plt.ylim(0,200)

添加图例,如:

plt.legend(labels=[],loc=(x,y)/"")

labels:图例对应名称(可省略)

loc:位置,(x,y)表示横纵位置,也可以用"best",“center”,"lower right"等等

  1. 显示:
plt.show()

综合以上几种操作代码为:

import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(4,6))
x=["8.17","8.24","8.31","9.7","9.14","9.21","9.28"]
Americas=[150.7234,162.3891,148.1995,176.3048,146.2450,138.6267,127.3971]
Europe=[113.4516,116.5092,117.2461,114.6065,111.3722,109.0667,109.7735]
SouthEast_Asia=[73.1279,61.4080,59.6456,54.3013,45.3539,38.3053,34.4305]
Western_Pacific=[42.9153,51.3581,55.3344,53.1922,48.7586,46.1979,37.8919]
plt.plot(x,Americas,label="美洲",color="#000000",marker="+")
plt.plot(x,Europe,label="欧洲",color='y',marker="o")
plt.plot(x,SouthEast_Asia,label="东南亚",color='g',marker="^")
plt.plot(x,Western_Pacific,label="大洋洲",color='b',marker="p")
plt.title("新冠肺炎确诊情况")
plt.xlabel("日期")
plt.ylabel("新增确诊人数/万人")
plt.ylim(0, 200)
plt.legend()
plt.show()

最终结果如图:
请添加图片描述

二、连续函数图像的绘制

  1. 需要导入科学计算基础库以及绘图库:
import numpy as np
import matplotlib.pyplot as plt

关于numpy的一点额外说明:

利用自带函数可直接对数列中每个数据进行运算,如:

>>>import numpy as np
>>>a=[1,2,3,4,5]
>>>b=np.sin(a)
array([ 0.84147098  0.90929743  0.14112001 -0.7568025  -0.95892427])

可用函数有:sin, cos, tan, arcsin, arccos, arctan, around(四舍五入), floor, ceil等

  1. 生成一组x坐标值——arange函数:

格式类似于range:开始值,终值(不含),步长(省略时为1,也可以为负数),如:

>>>import numpy as np
>>>np.arange(0,1,0.1)
array([0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.8,0.9])

arange的参数可以为浮点数,而range只能为整数,而且arange返回的是列表,range不是

  1. 生成一组x坐标值——linspace函数:

格式为:开始值,终值,元素个数(省略时为50)

在闭区间[开始值,终止值]之间等距生成指定个数元素(浮点数)的一个数组,如:

>>>import numpy as np
>>>np.linspace(0,1.2,13)
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. , 1.1])
>>>np.linspace(3,4,5)
array([3.  , 3.25, 3.5, 3.75, 4.  ])

(小数点应该是表示这是一个float类型而非int)

可有第四个参数endpoint,为True时含终值,为False时不含,省略时默认True,如

>>>np.linspace(3,4,5,endpoint=False)
array([3. , 3.2, 3.4, 3.6, 3.8])
  1. 创建子图——subplot函数:
subplot(numRows,numCols,plotNum)

numRows:子图的总计行数,默认为1

numCols:子图的总计列数,默认为1

plotNum:指明图样放在哪个子区域中,从左到右从上到下依次编号

subplot每次只创建一张子图,通过plotNum参数指明子图的编号(即位置),如:

plt.subplot(2,1,1)
plt.(x1,y1,'rx-') #第三个参数用单引号引住,以此为颜色、数据点形状、线形
plt.subplot(2,1,2)
plt.plot(x2,y2,'ko-')
  1. 设置画布——figure函数:
plt.figure(figsize=(x,y),dpi=80)

x,y:图形的长宽大小

dpi:分辨率,默认为80,越大越清晰,但不建议太大

若想同时绘制多个图,只需要给figure函数中增加一个整数参数,如:

plt.plot(x1,y1)
plt.figure(1,figsize=(6,6),dpi=80)
plt.plot(x2,y2)
plt.figure(2,figsize=(8,8),dpi=100)

综合以上几种操作总代码为:

import numpy as np 
import matplotlib.pyplot as plt
x1=np.linspace(0.0,5.0)
x2=np.linspace(0.0,5.0)
y1=np.cos(2*np.pi*x1)
y2=np.cos(2*np.pi*x2)*np.exp(-x2)
plt.figure(figsize=(8,8)) #创建一个绘图对象,设置其大小
plt.subplot(2,1,1)
plt.plot(x1,y1,'rx-') #红色,离散数据点形状为“,曲线为实线
plt.xlabel('time(s)')
plt.ylabel('Undamped')
plt.title('A tale of 2 subplots')
plt.subplot(2,1,2)
plt.plot(x2,y2,'ko-') #黑色,实心圆点,曲线为实线
plt.xlabel('time (s)')
plt.ylabel('Damped oscillation')
plt.show()

最终结果如图:
请添加图片描述

三、柱状图的绘制

  1. bar函数,格式:
bar(left,height,width=0.8,bottom=None)

left:柱状图的做边缘的x坐标序列(列表或元组),这里有个小技巧,如果要是画多个图,第一个横坐标序列若为x,则可令第二个横坐标序列为x+width,这样两个柱状图能正好连起来而不重合

height:柱状图的高度序列(列表或元组)

以下参数均不是必要参数,此为我认为较为常用,[全部内容在这里](matplotlib.pyplot.bar — Matplotlib 3.5.2 documentation):

width:柱状图的宽度,默认值为0.8

bottom:bar的地步高度,默认值为None

align:对齐方式,‘center’或者’edge’,默认值为’center’

color/edgecolor:柱状图/边线颜色,默认值为None(蓝色)

linewidth:线的粗细,默认值为None

orientation:柱状图朝向,vertical或horizontal,默认值为vertical

log:是否使用对数坐标,true为对数轴,False为正常轴

  1. legend函数详细用法:
legend(*args,**kwargs)

args:参数序列,即图形对象,可以是bar函数的返回值

kwargs:参数所对应的图里序列,类型为元组,每个部分用单引号引起来,这两个参数的元素数需相同

相较于绘制折线图中直接在plot中label='xxx’是另一种方法

如:

rects1=bar(,...,)
rects2=bar(,...,)
legend((rects1,rects2),('Men','Women'))
  1. text函数详细用法:

首先需要调用pylab的mpl模块,格式如下:

import matplotlib as plt
from pylab import mpl
plt.text(x,y,s,**kwargs)

x,y:分别为文本的横纵坐标值,针对不同的图建议通过尝试找到合适的x,y

s:为所要添加文本,用单/双引号引起来

**kwargs为可选参数,常见有:

ha:水平对齐(horizontal align)方式,‘center’,‘left’或’right’(x坐标相对文字的位置)

va:垂直对齐(vertical align)方式,‘center’,‘top’或’bottom’(y坐标相对文字的位置)

fontsize:字体大小,默认值为12

综合以上几种操作代码为:

import numpy as np
import matplotlib.pyplot as plt
N=5
menMeans=(20,35,30,35,27)
womenMeans=(25,32,34,20,25)
ind=np.arange(N)
width=0.35
ind=np.array(range(N))
rects1=plt.bar(ind,menMeans,width,color='r',edgecolor='b')
rects2=plt.bar(ind+width,womenMeans,width,color='y',edgecolor='m')
plt.legend((rects1, rects2),('Men','Women'))
plt.xlabel('men and women')
plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(ind+width/2, ('G1','G2','G3','G4','G5'))
plt.show()

最终结果如图:
请添加图片描述

四、极坐标图形的绘制

  1. 与连续函数图形绘制类似,只需增加参数polar=True,如:
t=np.arange(0,2*np.pi,0.01)
plt.subplot(2,2,1,polar=True) #这里是为了画多个图
r1=a*(1+np.sin(t))
plt.plot(t,r1,color='r')
  1. subplot_adjust函数设置多个子图间距,如:
plt.subplots_adjust(wspace=0.3,hspace=0.6)

wspace,hspace:为横纵间距,建议根据实际情况调整

亦可在plt.show()之前使用plt.tight_layout()使子图不重叠紧凑排布

综合以上操作,代码为:

import numpy as np
import matplotlib.pyplot as plt
a=10
t=np.arange(0,2*np.pi,0.01)
plt.subplot(2,2,1,polar=True)
r1=a*(1+np.sin(t))
plt.plot(t,r1,color='r')
plt.title('r=a(1+sint)')
plt.subplot(2,2,2,polar=True)
r2=a*np.cos(t)*np.cos(t)
plt.plot(t,r2,color='g')
plt.title('r=acos^2t')
plt.subplot(2,2,3,polar=True)
r3=a*np.sin(t)*np.sin(t)
plt.plot(t,r3,color='m')
plt.title('r=asin^2t')
plt.subplot(2,2,4,polar=True)
r4=a*np.cos(t)*np.sin(t)
plt.plot(t,r4,color='b')
plt.title('r=asint*cost')
plt.subplots_adjust(wspace=0.3,hspace=0.6)
plt.show()

最终结果如图:
请添加图片描述

五、隐函数图形的绘制

  1. 导入sympy库相应函数:
from sympy import plot_implicit as pt,Eq
from sympy.abs import x,y #引入隐函数对应变量
  1. 绘制隐函数:
pt(Eq(x*x+x*y+y*y,1),line_color='b')

最终结果如图:

请添加图片描述

六、三维图形的绘制

  1. 导入sympy库相应函数:
from sympy import *
from sympy.plotting import plot3d
  1. 绘制形如 z = ( x + y ) e − x 2 − y 2   x ∈ [ − 3 , 3 ] , y ∈ [ − 2 , 2 ] z=(x+y)e^{-x^2-y^2}\ x\in[-3,3],y\in[-2,2] z=(x+y)ex2y2 x[3,3],y[2,2]的函数图像:
from sympy.abc import x,y
a=plot3d((x+y)*exp(-x**2-y**2),(x,-3,3),(y,-2,2))

最终结果如图:
请添加图片描述

七、饼形图的绘制

  1. 导入matplotlib.pyplot即可:
import matplotlib.pyplot as plt
  1. pie函数,格式:
plt.pie([],colors=[],labels=[],explode=[],autopct='')

第一个参数为各个部分个数(会自动计算百分比)

colors:为颜色对应的列表,需一一对应

labels:为每一部分的名称

explode:为每部分远离圆心距离,可表突出强调,类型为float(一般0.1左右即可)

autopct:格式化数据

综合以上几种操作代码为:

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams["font.sans-serif"]=["SimSun"]
matplotlib.rcParams["axes.unicode_minus"] = False
y=[21,47,48,36,47]
plt.pie(y,colors=['gray','green','limegreen','blue','purple'],explode=[0,0,0,0,0.1],autopct='%.2f%%')
plt.title("各个等级人数占比")
plt.legend(labels=('newbie','pupil','specialist','expert','candidate'),title='不同等级对应颜色',loc=(1,0.618))
plt.show()

最终结果如图:

请添加图片描述

附:

关于颜色的说明

简写颜色
‘r’红色
‘g’绿色
‘b’蓝色
‘c’青色
‘m’品红色
‘y’黄色
‘k’黑色
‘w’白色

自定义颜色,形如"#00FF00"表示绿色,具体可参考HTML颜色值

关于离散数据点形状的说明

形状简写
黑点‘.’
加号‘+’
型号‘**’
实心圆点‘o’
菱形‘d’
五角星‘p’
六角形‘h’
X号‘x’
方块‘s’
小三角‘^’

关于线形的说明

类型简写说明
‘solid’(默认)‘-’实线
‘dotted’‘:’点虚线
‘dashed’‘–’破折线
‘dashdot’‘-.’点划线
‘None’’ ’不画线
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值