Python 画图,还得是 matplotlib!!!

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!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342