设置值 | 说明 |
---|---|
b | 蓝色 |
g | 绿色 |
r | 红色 |
c | 蓝绿色 |
m | 洋红色 |
y | 黄色 |
k | 黑色 |
w | 白色 |
#ffffff | 白色(RGB表示方式也可以) |
import matplotlib.pyplot as plt
import numpy as np
x1=np.random.randint(1,10,size=(5,))#随机生成范围为1到10(不包含10)的整数,大小为5
y=np.arange(5)#生成一组0到4的数组
print(x1)
print(y)
plt.plot(x1,y,color='#ff8000')#颜色为橙色,
plt.show()#显示画布图像
很多时候我们需要在一张画布画多条的时候,每条线它会自动为我们更改颜色,其他图行一样
线条样式linestyle
linestyle设置值 | 说明 |
---|---|
‘_’ | 实线 |
‘- -’ | 双划线 |
‘-.’ | 点划线 |
‘:’ | 虚线 |
线条标记样式marker
marker设置值 | 说明 |
---|---|
. | 点标记 |
o | 实心圆标记 |
v | 下三角标记 |
^ | 上三角标记 |
* | 星形标记 |
p | 实心五角形标记 |
s | 实心正方形标记 |
使用实列:
import matplotlib.pyplot as plt
import numpy as np
x1=np.random.randint(1,10,size=(5,))#随机生成范围为1到10的整数,大
x2=np.random.randint(1,10,size=(5,))
y=np.arange(5)
# print(x)
print(y)
# plt.plot(x0,y)
plt.plot(x1,y,linestyle='--',marker="o")
plt.plot(x2,y,linestyle=':',marker="*")
plt.show()
plt.title(“”)
import pandas as pd
import matplotlib.pyplot as plt
x=[1,2,3,2,5]
y=['a','b','c','d','你']
plt.plot(x,y)
plt.title("加油哦")
plt.show()
运行结果中文都没有显示出来,如果含有中文汉字,我们需要加上这段代码解决乱码问题:plt.rcParams[‘font.sans-serif’]=[‘SimHei’]
plt.rcParams[‘axes.unicode_minus’] = False
运行结果如图:
添加坐标轴标题:plt.xlable(“”)或者plt.ylable(“”)
添加轴刻度: plt.xticks()与plt.yticks()
轴刻度范围: plt.xlim()与plt.ylim()
操作代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.xticks(range(1,5),['1月','2月','3月','4月'])
plt.ylim(0,7)
plt.plot(x,y)
plt.title("加油哦")
plt.show()
添加文本标签: plt.text(x, y, s, fontdict=None, withdash=False, **kwargs)
x,y:位置(position)
s:该position需要展示的值
fontdict:字体
withdash:宽度
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# x=[1,2,3,2,5]
# y=['a','b','c','d','你']
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.xticks(range(1,5),['1月','2月','3月','4月'])
plt.ylim(0,7)
for i in range(len(x)):
plt.text(x[i],y[i],s=y[i])
plt.plot(x,y)
plt.title("加油哦")
plt.show()
添加图例: plt.legend()
第一步:给plt.plot( )中参数label=''传入字符串类型的值,也就是图例的名称
第二步:使用plt.legend( )使上述代码产生效果
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
# plt.xticks(range(1,5),['1月','2月','3月','4月'])
plt.bar(x,y,width=0.25,label='A')
plt.bar(x+0.3,y,width=0.25,label='B')
plt.legend()
plt.title("加油哦")
plt.show()
添加注释: plt.annotate()参数
s 为注释文本内容
xy 为被注释的坐标点
xytext 为注释文字的坐标位置
xycoords and textcoords 是坐标xy与xytext的说明
weight 设置字体线型
color 设置字体颜色
arrowprops #箭头参数,参数类型为字典dict
bbox给标题增加外框
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.bar(x,y,width=0.25,label='A')
plt.legend()
plt.title("加油哦")
for i in range(len(x)):
plt.annotate(x[i],xy=(x[i],y[i]))
plt.show()
这里不多说,感觉跟plt.text()差不多,就是比它功能更多一点。
plt.subplots_adjust(left,right,top,bottom)
这里需要注意的是,left不可以大于等于right,bottom与top也一样.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure(num="画布",facecolor="yellow")
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.bar(x,y,width=0.25,label='A')
plt.legend()
plt.subplots_adjust(left=0.1,right=0.9,bottom=0.09,top=0.9)
plt.show()
**plt.grid(b, which, axis, color, linestyle, linewidth, kwargs)
b : 布尔值。就是是否显示网格线的意思。官网说如果b设置为None, 且kwargs长度为0,则切换网格状态。但是没弄明白什 么意思。如果b设置为None,但是又给了其它参数,则默认None值失效。
which : 取值为’major’, ‘minor’, ‘both’。 默认为’major’。看别人说是显示的,我的是Windows7下,用Sublime跑的,minor只是一个白画板,没有网格,major和both也没看出什么效果,不知道为什么。
axis : 取值为‘both’, ‘x’,‘y’。就是以什么轴为刻度生成网格。例如我输入参数x就会在x轴方向上生成纵向的网格刻度。没有输入的方向则不会显示网格刻度。这里多谢 @湖尘 指正。
color : 这就不用多说了,就是设置网格线的颜色。或者直接用c来代替color也可以。
linestyle :也可以用ls来代替linestyle, 设置网格线的风格,是连续实线,虚线或者其它不同的线条。 | ‘-’ | ‘–’ | ‘-.’ | ‘:’ | ‘None’ | ’ ’ | ‘’]
linewidth : 设置网格线的宽度
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure(num="画布",facecolor="yellow")
x=np.arange(1,5)
y=np.random.randint(1,6,size=(4,))
plt.bar(x,y,width=0.25,label='A')
plt.legend()
plt.title("加油哦")
plt.grid()
plt.show()
语法使用:
plt.figure()
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
- num:图像编号或名称,数字为编号 ,字符串为名称
- figsize:指定figure的宽和高,单位为英寸; dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
- facecolor:背景颜色 edgecolor:边框颜色
- frameon:是否显示边框
如果frameon设置为False,那么背景颜色为默认的白色
代码操作:
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(num="nnihao",facecolor='red',frameon=True)
plt.show()
# 折线图:女体重大致情况
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
# 读取文件
data=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
f_weight=list(data[data['性别']=='女'].loc[1::,'体重(kg)'])
x=np.arange(len(f_weight))
plt.ylabel("体重(kg)")
plt.plot(x,f_weight)
plt.grid(axis='y')
plt.show()
垂直方向的条形图
plt.bar(),这个就不展示了,可以自己尝试
水平方向的条形图
plt.barh()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 读取文件
data1=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
# 柱形图:来自个省份的人数分布
provice_group=data1.groupby('省份')
p_count=provice_group['姓名'].count().values
provice=provice_group['姓名'].count().index
plt.barh(provice,p_count)
plt.title("运动员个省份人数分布情况")
plt.show()
# 直方图:运动员身高分布情况
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 读取文件
data=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
bin=[155,160,165,170,175,180,185,190,195,200,205,210]
y=data.loc[1:,'身高(cm)'].values
plt.hist(y,bin)
plt.show()
# 散点图:运动员年龄与身高分布情况
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 读取文件
data=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
x=data['身高(cm)']
y=data['年龄(岁)']
plt.scatter(x,y)
plt.show()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 读取文件
data=pd.read_csv(r"D:\learnpy\npmdata\运动员信息表.csv")
data['年龄分段']=' '
# for i in range()
a=data['年龄(岁)'].between(20,24)
b=data['年龄(岁)'].between(24,30)
c=data['年龄(岁)'].between(30,35)
data['年龄分段'][a]="20~24"
data['年龄分段'][b]="24~30"
data['年龄分段'][c]="30~35"
new_data=data.groupby('年龄分段')
x=new_data['姓名'].count().values
y=new_data['姓名'].count().index
plt.pie(x,labels=y,autopct='%1.1f%%')
#plt.pie(x,labels=y,autopct='%1.1f%%',explode=(0.1,0,0.1,0),shadow=True)
plt.legend(y)
plt.show()
plt.pie(x,labels=y,autopct='%1.1f%%',explode=(0.1,0,0.1,0),shadow=True,wedgeprops={'width':0.4,'edgecolor':'r'})
subplot(numRows, numCols, plotNum)
import matplotlib.pyplot as plt
import numpy as np
n1=np.arange(0,6,0.05)
n2=np.arange(0,6,0.1)
print(n1)
# 建立画布
plt.figure()
plt.subplot(1,2,1)
plt.plot(n1,np.cos(2*np.pi*n1))
plt.subplot(1,2,2)
plt.plot(n2 ,np.cos(2*np.pi*n2))
plt.show()
两者差不多