美文网首页
Python 画图,还得是 matplotlib!!!

Python 画图,还得是 matplotlib!!!

作者: 科研侠 | 来源:发表于2021-12-12 14:18 被阅读0次

Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。可用于Python脚本,只需几行代码就可以生成图表、直方图、功率谱、条形图、误差图、散点图等。

不多废话,直接开搞。

安装方法如下:

pip install matplotlib

一、Matplotlib画图简单实现折线图

1.折线图的绘制:

from matplotlib import pyplot as plt

x = range(1,8)  # x轴的位置

y = [17, 17, 18, 15, 11, 11, 13]  #传入x和y,通过plot画折线图

plt.plot(x,y)

plt.show()
图片1.png

这样画出来的图感觉太单调了,那么给它配点颜色和形状吧:

2.折线的颜色和形状设置如下:

from matplotlib import pyplot as plt

x = range(1,8)  # x轴的位置

y = [17, 17, 18, 15, 11, 11, 13]  #传入x和y,通过plot画折线图

plt.plot(x, y, color='red',alpha=0.5,linestyle='--',linewidth=3)

plt.show()

得出以下图例:

图片2.png

3.基础属性设置为:

color='red' :折线的颜色

alpha=0.5:折线的透明度(0-1)

linestyle='--' :折线的样式

linewidth=3:折线的宽度

其中的线的样式为:

-实线(solid)

--短线(dashed)

-.短点相间线(dashdot)

:虚点线(dotted)

4.图片的大小和保存方法如下:

from matplotlib import pyplot as plt

import random

x = range(2,26,2)  # *x轴的位置*

y = [random.randint(15, 30) for i in x]  #*设置图片的大小*

#*设置画布对象,figsize中对应的单位是英寸,dpi是每英寸有多少像素点*

plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y)  #*传入x和y,通过plot画图*

#plt.show()

plt.savefig('./t1.png')

#*图片的格式也可以保存为svg这种矢量图格式,这种矢量图放在网页中放大后不会有锯齿*

# plt.savefig('./t1.svg')

5.绘制x轴和y轴的刻度

from matplotlib import pyplot as plt

import random  

*x = range(2,26,2)* #*x轴的位置*

y = [random.randint(15, 30) for i in x]

plt.figure(figsize=(20,8),dpi=80)

#*设置x轴的刻度*

#* plt.xticks(x)*

# *plt.xticks(range(1,25))*

#*设置y轴的刻度*

#*plt.yticks(y)*

#*plt.yticks(range(min(y),max(y)+1))*

#*构造x轴刻度标签*

x_ticks_label = ["{}:00".format(i) for i in x]

#rotation = 45让字旋转45度

plt.xticks(x,x_ticks_label,rotation = 45)

#*设置y轴的刻度标签*

y_ticks_label = ["{}℃".format(i) for i in range(min(y),max(y)+1)]

plt.yticks(range(min(y),max(y)+1),y_ticks_label)

#*绘图*

plt.plot(x,y)

plt.show()

得到以下图例:

图片3.png

6.设置显示中文

#*matplotlib只显示英文,无法显示中文,需要修改matplotlib的默认字体(现在版本直接就可以显示)*

#*通过matplotlib下的font_manager可以解决*

#*两个小时内的每分钟跳动变化*

from matplotlib import pyplot as plt

import matplotlib

import random

x = range(0,120)

y = [random.randint(10,30) for i in range(120)]

plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y)  # *加坐标轴信息*

# *在有中文输出的地方,增加一个属性: fontproperties*

#*比如 plt.xlabel('时间',fontproperties = 'simHei',fontsize=20)*

#*rotation 将字体旋转 45 度*

from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=18)

plt.xlabel('时间',rotation=45,fontproperties = my_font)

plt.ylabel("次数",fontproperties = my_font)

# *设置标题*

plt.title('每分钟跳动次数',fontproperties = my_font,color='red')

plt.show()

如图:

图片4.png

二、绘制散点图:

from matplotlib import pyplot as plt

from matplotlib import font_manager

y = [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]

x = range( 1, 32 )

# *设置图形大小*

plt.figure( figsize=(20, 8), dpi=80 )

# *使用 scatter 绘制散点图*

plt.scatter( x, y, label='3 月份' )

# *调整 x 轴的刻度*

my_font = font_manager.FontProperties( fname='C:\Windows\Fonts\STSONG.TTF', size=10 )

_xticks_labels = ['3 月{}日'.format( i ) for i in x]

plt.xticks( x[::3], _xticks_labels[::3], fontproperties=my_font, rotation=45 )

plt.xlabel( ' 日 期 ', fontproperties=my_font )

plt.ylabel( '温度', fontproperties=my_font )

#* 图 例*

plt.legend( prop=my_font )

plt.show()

如图:


图片6.png

三、绘制条形图:

from matplotlib import pyplot as plt

from matplotlib import font_manager

my_font =font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=16)

a = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']

b = [38.13,19.85,14.89,11.36,6.47,5.93]

plt.figure(figsize=(20,8),dpi=80)

# 绘制条形图的方法

'''

*width=0.3条形的宽度*

'''

rects = plt.bar(range(len(a)),b,width=0.3,color='r')

plt.xticks(range(len(a)),a,fontproperties=my_font,rotation=45)

# 在条形图上加标注(水平居中)

for rect in rects:

    height = rect.get_height()

    plt.text(rect.get_x() + rect.get_width() / 2, height+0.3, str(height),ha="center")

plt.show()

如图:


图片7.png

四、绘制直方图:

#* 1)准备数据*

time = [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]

from matplotlib import font_manager

from matplotlib import pyplot as plt

my_font =font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=18) # *2) 创建画布*

plt.figure(figsize=(20, 8), dpi=100) # *3)绘制直方图*

#* 设置组距*

distance = 2

# *计算组数*

group_num = int((max(time) - min(time)) / distance) # 绘制直方图

plt.hist(time, bins=group_num)

# *修改 x 轴刻度显示*

plt.xticks(range(min(time), max(time))[::2])

# *添加网格显示*

plt.grid(linestyle="--", alpha=0.5)

#*添 加 x,y 轴 描 述 信 息*

plt.xlabel("电影时长大小",fontproperties=my_font)

plt.ylabel("电影的数据量",fontproperties=my_font)

# *4)显示图像*

plt.show()
图片8.png

五、绘制饼状图:

import matplotlib.pyplot as plt

import matplotlib

label_list = ["第一部分", "第二部分", "第三部分"]# *各部分标签*

size = [55, 35, 10]# *各部分大小*

color = ["red", "green", "blue"]# *各部分颜色*

explode = [0, 0.05, 0] # *各部分突出值*

"""

绘 制 饼 图

explode: 设 置 各 部 分 突 出

label: 设 置 各 部 分 标 签

labeldistance:设置标签文本距圆心位置,1.1 表示 1.1 倍半径

autopct: 设 置 圆 里 面 文 本

shadow:设置是否有阴影

startangle:起始角度,默认从 0 开始逆时针转

pctdistance:设置圆内文本距圆心距离返回值

l_text:圆内部文本,

matplotlib.text.Text object

p_text:圆外部文本"""

matplotlib.rcParams['font.sans-serif']=['SimHei']

patches, l_text, p_text = plt.pie(size,explode=explode, colors=color, labels=label_list,

labeldistance=1.1, autopct="%1.1f%%", shadow=False,

startangle=90, pctdistance=0.6)

plt.axis("equal")# 设置横轴和纵轴大小相等,这样饼才是圆的

plt.legend()

plt.show()

如图:


图片9.png

好了,本期的Python画图matplotlib分享就到这里啦,如果您感觉不错的话,您的分享就是对我们的最大支持QaQ!

相关文章

网友评论

      本文标题:Python 画图,还得是 matplotlib!!!

      本文链接:https://www.haomeiwen.com/subject/xzyrfrtx.html