python三维图形注释_Python数据分析注释matplolib绘图注释和示例,笔记,及

本文介绍了Python数据可视化库matplotlib的使用,包括如何绘制折线图、散点图、条形图和直方图,提供了详细的代码示例。通过matplotlib,你可以轻松地将数据转换为直观的图形,并进行定制化设置,如图像大小、保存格式、添加描述信息等。文章还展示了如何在图表中添加特殊标记、水印以及调整刻度和网格。
摘要由CSDN通过智能技术生成

先记录小技巧:

pycharm中,鼠标点在一个方法上,ctrl+b,即转到该方法的源码,以找到使用方法。

概念及环境

使用意义

:从一堆数据中找到或总结出需要的信息,帮助判断和决策

与web、爬虫、机器学习相结合

基本流程

:提出问题->准备数据->分析数据->获得结论->成果可视化等其他操作

一般使用环境

:conda(容易解决各种安装问题)

matplolib

重要的事情讲在前面

matplotlib用于绘图,可绘制的图形在

matplotlib官网

上进行查阅获取代码,更改变量即可。

打不开的话就用这个

matplolib中文文档

以下笔记均以绘制折线图、散点图、条形图和直方图为例。

matplolib基本介绍

matplolib可以将数据可视化,直接用python执行,名字取材于matlab。

折线图基本要点

(

axis轴

:坐标轴)

使用一般方法:

以折线图为例:

from matplotlib import pyplot as plt#模块导入

x = X#传递自变量

y = Y#传递应变量

plt.plot(x,y)#导入变量,并通过plot绘制折线图(不展示)

plt.show()#展示图形

此时显示的时一段折线图。

但是matplolib还有更多的设置,如

设置图片大小

fig= plt.figure(figsize = (a, b), dpi = 80)`#a、b表示宽和高

保存到本地

plt.savefig('./name.svg')#./代表再当前路径下的文件,可以更改。使用.svg格式是矢量图格式,避免模糊。

描述图像信息

添加描述信息

plt.xlabel('xlabel')

plt.ylabel('ylabel')

plt.title('title')

调整刻度:(以x轴为例,y轴即把xtick改为ytick)

此处注意:更改刻度的疏密可用此处代码表示:

_x = list(x)[shart, stop, step]

#把x转化为列表,方便用[ ::]截取片段

调整图表:

绘制网格:在图像绘制后,加入代码

plt.grid()

在调整x轴和y轴刻度时会直接调整网格。一般可以传入如alpha(透明度)等参数。

添加一条新的曲线:

直接再加入一条:

plt.plot(x, y)

添加图例

plt.plot(x, y,label='label')

plt.legend(prop='my_font')

#除了legend更改字体使用prop以外,更改字体均使用fontproperties

以下两点待补充

标记特殊点

添加水印

折线图的小案例

假设要记录cathy和sarah两人11岁至30岁的旅行经历

from matplotlib import pyplot as plt

from matplotlib import font_manager

#my_font = font_manager.FontProperties('C:/Users/MI/AppData/Local/Microsoft/Windows/Fonts/BUSTER Regular.ttf')

my_font = font_manager.FontProperties(fname='C:/Users/MI/AppData/Local/Microsoft/Windows/Fonts/DuntonWriting.ttf')

x = range(11,31)

y = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]

y2 = [2, 0, 3, 5, 3, 2, 2, 1, 1, 1, 1, 3, 2, 5, 6, 3, 1, 2, 3, 0]

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

xtick = []

for i in x:

xtick += f'{i}'

plt.xticks(x, xtick,fontproperties=my_font)

plt.xlabel('age= ',fontproperties=my_font)

plt.ylabel('annual travel-times', fontproperties=my_font)

plt.title('travel-times between the age of 11 and 30',fontproperties=my_font)

plt.plot(x, y, color='cyan', label='Sarah',linewidth=3)#颜色可搜索颜色代码(十六进制)

plt.plot(x, y2, color='orange', label='Cathy')

plt.grid(alpha=0.5)

plt.legend(prop=my_font,loc=0)

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

plt.show()

结果:

d8cbf6bf37975311c2ebf701ed0039fc.png

散点图基本要点

基本同上,使用plt.scatter进行绘图,直接上案例:

北京3月和10月的气温散点图

from matplotlib import pyplot as plt

from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='C:/Users/MI/AppData/Local/Microsoft/Windows/Fonts/C288-蔡云汉隶书书法字体.TTF')

x1 = range(1, 32)

#排版漂亮,两个图要分离开

x2 = range(51,82)

_x = list(x1) + list(x2)

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

x_tick = []

for i in x1:

x_tick += [f'March :day {i}']

for i in x2:

x_tick += [f'October :day {i-50}']

plt.xticks(_x[::3], x_tick[::3], rotation=45, fontproperties=my_font)

plt.xlabel(f'temperature in March', fontproperties=my_font)

plt.ylabel(f'temperature in October', fontproperties=my_font)

plt.title(f'Temperature of two months in Beijing')

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

y2 = [26, 26, 28, 19, 21, 16, 16, 19, 18, 20,19,20, 21, 22, 13, 5, 13, 17, 10, 11, 17, 13, 13, 24, 12, 11, 13, 12, 13, 5, 6]

plt.scatter(x1, y1, label='March', color='blue')

plt.scatter(x2, y2, label='October',color='orange')

plt.legend(prop=my_font, loc=0)

plt.savefig('temp1.png')

plt.show()

948239e7fb7131b59d294c111fcf2d33.png

条形图重点

(一般用于数据对比、数量/频率统计等)

2017年票房数据(因为字体这边有点问题,用f(n)表示电影名)

from matplotlib import pyplot as plt

from matplotlib import font_manager

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

my_font = font_manager.FontProperties(fname='C:/Windows/Fonts/simhei.ttf')

x=[]

#x = ['f1','速度与激情','功夫瑜伽',"西游降魔篇",'变形金刚5','摔跤吧爸爸','加勒比海盗','金刚','极限特工','生化危机','乘风破浪','生化危机','智取威虎山','大闹天竺','金刚狼','蜘蛛侠','悟空传','银河护卫队','轻声','木乃伊']

for i in range(1,21):

x += [f'f{i}']

y = [56,27,17,16,15,13,11,11,11,11,10,10,8,7,7,7,6,6,6,6]

plt.ylabel(f'booking office')

plt.xlabel('film name')

plt.title('films\' bookong office in 2017')

plt.bar(x, y, color='#BA55D3',width=0.3)

plt.savefig('temp2.png')

plt.show()

c246202093e62fd4dd9e4d4b8528ec40.png

但条形图中,通常还会有两种需求:横向条形图、多次条形图,以下给出解决方法及案例

横向条形图:

plt.barh(x,y)

但此时若写

plt.barh(x,y,width=3)

代码会出错,核查源码后发现barh()的参数如下:

barh(y, width, height=0.8, left=None, *, align=‘center’, **kwargs)

简单更改后结果如下:

516bebe8b0628b3eaff3e0d1fbd2a065.png

多次条形图的重点在于紧邻的几条数据。

以三天中4部电影的票房对比为例:

from matplotlib import pyplot as plt

from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='C:/Windows/Fonts/simhei.ttf')

_x = ['film1','film2','film3','film4']

#输入4部电影每天的票房

y3=[15746,312,4496,329]

y2=[12357,156,2045,168]

y1=[3458,399,2358,362]

#设置width时候保证其数值小于1/n(n为图中每一大块含有的条形图的数量)

#此处n表现为天数

#否则条形图们就会紧紧挤在一起

bar_width = 0.2

#通过使向右移动一个width的长度,设置紧贴的3列数据

x1 = list(range(len(_x)))

x2 = [i+bar_width for i in x1]

x3 = [j+bar_width for j in x2]

plt.bar(range(len(_x)),y1,width=bar_width,label='day1')

plt.bar(x2,y2,width=bar_width, label='day2')

plt.bar(x3,y3,width=bar_width, label='day3')

plt.xticks(x2,['film1','film2','film3','film4'])

plt.legend(loc=0)

plt.title('booking office of 4 films in 3 days')

plt.ylabel('booking office')

plt.xlabel('films')

plt.savefig('temp4.png')

plt.show()

输出结果:

dd2c0e35039b3b30943e2e4728cd60f6.png

直方图重点

直方图调用的函数是:

plt.hist(_list, num_bins)

_list代表需要统计的数据

num_bins代表组数(分组数量)

分组方面,一般规定数据在100以内时分5~12组

大于100时,n = 极差/组距,组距即每个小组的间隔

数据差距越大,组距应相应扩大

若组距不确定,可设置bins = list,传入一个数组。

若要改为频率直方图,输入以下代码:

plt.hist(_list,nub_bins,nomed=True)

案例:统计250部电影时长的分布情况

此处案例中由于y是随机产生的,因此不能保证(max(y)-min(y))//d是整数,因此数据条和网格不能重合,现实数据可以避免这个问题。

import random as rd

from matplotlib import pyplot as plt

#设置图形大小

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

#假设电影时长

y = []

for i in range(250):

y.append(rd.randint(100,200))

#绘制直方图

d=5#组距

num = max(y)//d

plt.hist(y, num)

#设置x轴刻度

#注意添加步长(组距)

_x = [f'{i}min' for i in range(min(y), max(y)+d, d)]

plt.xticks(range(min(y), max(y)+d, d),_x, rotation=45)

#添加描述信息

plt.xlabel("the lenth of movies")

plt.ylabel('the number of movies')

plt.title('movie-numbers of different lenth')

plt.grid()

plt.show()

plt.savefig('temp5.png')

c688c5efe89849989518d5efe0f7ecce.png

注意:如果给出的数据是已经统计好的数据,则直接使用条形图来制作直方图,设置width=1(消除条形图之间的空隙),根据情况修改xticks即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值