文章目录
-
- 图表样式及属性简介
-
- 1、线linestyle和点marker的样式
- 2、标题 plt.title()
- 3、轴标签 plt.xlabel() plt.ylabel()
- 4、轴范围 (上限下限) plt.xlim() plt.ylim()
- 5、轴刻度 plt.xticks() plt.yticks()
- 6、图例 plt.legend()
- 7、四个边框 ax.spines[ ].set_color()
- 8、数据标签 plt.text()
- 9、带箭头的显示文本 plt.annotate()
- 一、折线图 plt.plot()
-
- 1.1、参数讲解
- 1.2、一条折线
- 1.3、多条折线
- 1.4、水平线与垂直线
- 二、散点图 plt.scatter()
-
- 三、饼图 plt.pie()
-
- 3.1、参数
- 3.2、饼图
- 3.3、改变饼图中的字体大小
- 3.4、环形图
- 四、条形图(柱状图) plt.bar()
-
- 4.1、参数
- 4.2、单条形图
- 4.3、横向条形图 plt.barh()
- 4.4、多标签条形图 — 左右分布图
- 4.5、多标签条形图 — 叠堆图
- 五、直方图 plt.hist()
- 六、箱线图 plt.boxplot ()
- Matplotlib是一个Python 2D绘图库,Matplotlib试图让简单的事情变得更简单,让无法实现的事情变得可能实现。 只需几行代码即可生成 图,直方图,条形图,散点图等。支持python、numpy、pandas基本数据结构,运营高效且有较丰富的图表库。可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。能将数据进行可视化,更直观的呈现;使数据更加客观、更具说服力。
- 本博客主要展示基本的常见图表制作及图表样式修改,图表:折线图、饼图、散点图、条形图、直方图、热力图、箱线图。
- 下面这张图向我们展示了一张图表当中的所有可以设置的属性,以此美化图表。借着折线图的制作详细展示这些属性的修改。
- matplotlib官网:点这里
图表样式及属性简介
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = [1.3,2.5,3.7,5.7,8.9,9.5]
y = [2.5,3.5,4.5,6.8,7.9,9.9]
plt.figure(figsize=(10,4))
plt.plot(x,
y,
color='c',
linewidth=5,
linestyle='--',
marker='o',
markeredgecolor='red',
markeredgewidth=1,
markersize=10,
label='我是图例'
)
plt.title('我是标题',fontsize=20,color='red',loc='left')
plt.xlabel('我是x轴',fontsize=15,color='blue',labelpad=-25,position=(1.05,0))
plt.ylabel('我是y轴',fontsize=15,color='blue',labelpad=10,position=(0,0.9))
plt.xticks(x,[f'x_{i}' for i in range(len(x))],size=12)
plt.yticks(y,["%.2f" %i for i in y],size=11)
plt.ylim([0,15])
plt.legend(loc='upper center')
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
for x,y in zip(x,y):
plt.text(x-0.1,y+0.5,y)
plt.annotate('我在学习python画图呢!',xytext = (6,4),xy = (9,10), arrowprops = dict(facecolor = 'blue', shrink = 0.1))
plt.scatter(9,10,s=100,c='m')
plt.show()
1、线linestyle和点marker的样式
线样式 |
描述 |
‘-’ |
实线样式 |
‘- -’ |
短横线样式 |
‘-.’ |
点划线样式 |
‘:’ |
虚线样式 |
点样式 |
描述 |
点样式 |
描述 |
‘1’ |
下箭头标记 |
‘.’ |
点标记 |
‘2’ |
上箭头标记 |
‘o’ |
圆标记 |
‘3’ |
左箭头标记 |
‘x’ |
X 标记 |
‘4’ |
右箭头标记 |
‘^’ |
正三角标记 |
‘s’ |
正方形标记 |
‘v’ |
倒三角标记 |
‘p’ |
五边形标记 |
‘<’ |
左三角标记 |
‘D’ |
菱形标记 |
‘>’ |
右三角标记 |
‘+’ |
加号标记 |
‘_’ |
水平线标记 |
2、标题 plt.title()
plt.title(label,
loc='',
fontsize='',
color='',
pad=
)
3、轴标签 plt.xlabel() plt.ylabel()
plt.xlabel(label,
fontsize=15,
color='blue',
labelpad=-25,
position=(1.05,0))
4、轴范围 (上限下限) plt.xlim() plt.ylim()
plt.ylim(y_min,y_max)
5、轴刻度 plt.xticks() plt.yticks()
plt.xticks(ticks=None,
labels=None,
color='')
6、图例 plt.legend()
plt.plot(label)
plt.legend(loc='')
loc位置 |
描述 |
‘upper left’ |
左上方 |
‘upper right’ |
右上方 |
‘lower left’ |
左下方 |
‘lower right’ |
右下方 |
‘upper center’ |
上正中心 |
‘lower center’ |
下正中心 |
‘center left’ |
左正中心 |
‘center right’ |
右正中心 |
‘center’ |
正中心 |
‘best’ |
重叠部分最少的最佳位置 |
7、四个边框 ax.spines[ ].set_color()
ax = plt.gca()
ax.spines['loc'].set_color('color')
8、数据标签 plt.text()
plt.text(x,y,text,fontsize='',color='')
9、带箭头的显示文本 plt.annotate()
plt.annotate(text,
xytext=(),
xy=(),
fontsize=12,
color='red',
arrowprops=dict{facecolor='',shrink=0.1})
一、折线图 plt.plot()
1.1、参数讲解
plt.plot(x,
y,
color='green',
marker='o',
linestyle='dashed',
linewidth=2,
markersize=12,
markeredgecolor='',
markeredgewidth=12,
label='')
1.2、一条折线
x = np.arange(0,10)
y1 = x**2+5*x
y2 = 10*x+5
plt.figure(figsize=(5,3))
plt.plot(x,y1)
plt.show()
1.3、多条折线
plt.figure(figsize=(5,3))
plt.plot(x,y1,'--.',label='y1')
plt.plot(x,y2,':*',label='y2')
plt.legend()
plt.show()
1.4、水平线与垂直线
- 水平线:y是定值,x不定值,传参时x和y的维度必须一致
- 垂直线:x是定值,y不定值,传参时x和y的维度必须一致
plt.plot([5 for i in range(0,10)],range(0,10),c='red')
plt.plot(range(1,10),[5 for i in range(11,20)],c='yellow')
plt.legend(['我是垂直线','我是水平线'])
plt.show()
二、散点图 plt.scatter()
2.1、参数
plt.scatter(x, y,
s=None,
c=None,
marker=None,
cmap=None,
alpha=None,
linewidths=None,
edgecolors=None
)
2.2、散点图
x = np.random.random(20)*10
y = np.random.random(20)*10
plt.scatter(x, y, s=80, marker='o', c='red',alpha=0.7, edgecolors='yellow')
plt.show()
2.3、气泡图
- 气泡图就是将散点图的点根据数值大小变化点的大小(及颜色)
- 参数cmap取值可以参考: 这里
x = np.random.random(20)*10
y = np.random.random(20)*10
s = np.arange(100,400,20)
plt.scatter(x, y, s=s,c=y, marker='o', cmap='plasma',alpha=0.7)
plt.show()
三、饼图 plt.pie()
3.1、参数
pie(x,
explode=None,
labels=None,
colors=None,
autopct=None,
pctdistance=0.6,
shadow=False,
labeldistance=1.1,
radius=None,
counterclock=True,
)
3.2、饼图
a = {'shop1':100,'shop2':200,'shop3':300,'shop4':400,'shop5':500,'shop6':600}
plt.pie(a.values(),
radius=1.4,
labels=a.keys(),
labeldistance=1.06,
autopct="%.2f%%",
pctdistance=0.7,
colors=['Indigo','BlueViolet','MediumPurple','MediumSlateBlue','SlateBlue','DarkSlateBlue'],
counterclock=False,
explode=[0,0,0,0.14,0,0.1]
)
plt.show()
3.3、改变饼图中的字体大小
plt.figure(figsize=(4,5))
a = {'shop1':100,'shop2':200,'shop3':300,'shop4':400,'shop5':500,'shop6':600}
patches,l_text,p_text=plt.pie(a.values(),
radius=1.4,
labels=a.keys(),
labeldistance=1.06,
autopct="%.2f%%",
pctdistance=0.7,
colors=['Indigo','BlueViolet','MediumPurple','MediumSlateBlue','SlateBlue','DarkSlateBlue'],
counterclock=True,
explode=[0,0,0,0.14,0,0.1]
)
for t in l_text:
t.set_size(15)
for t in p_text:
t.set_size(12)
plt.show()
3.4、环形图
plt.figure(figsize=(4,5))
a = {'shop1':100,'shop2':200,'shop3':300,'shop4':400,'shop5':500,'shop6':600}
plt.pie(a.values(),
radius=1.4,
labels=a.keys(),
labeldistance=1.06,
autopct="%.2f%%",
pctdistance=0.7,
colors=['Indigo','BlueViolet','MediumPurple','MediumSlateBlue','SlateBlue','DarkSlateBlue'],
counterclock=True
)
plt.pie([1],radius=0.8,colors='w')
plt.show()
四、条形图(柱状图) plt.bar()
4.1、参数
plt.bar(x,
height,
width=0.8,
bottom=None,
color,
edgecolor,
linewidth,
tick_label,
xerr, yerr,
ecolor,
orientation,
4.2、单条形图
shop1 = [100,200,300,450,500]
date = ['06-14','06-15','06-16','06-17','06-18']
plt.figure(figsize=(8,3))
plt.bar(date,shop1)
plt.show()
4.3、横向条形图 plt.barh()
shop1 = [100,200,300,450,500]
date = ['06-14','06-15','06-16','06-17','06-18']
plt.figure(figsize=(8,3))
plt.barh(date,shop1)
plt.show()
4.4、多标签条形图 — 左右分布图
shop1 = [100,200,300,450,500]
shop2 = [70,178,245,356,467]
date = ['06-14','06-15','06-16','06-17','06-18']
plt.figure(figsize=(8,4))
plt.bar(np.arange(5)-0.15,shop1,width=0.3,color='red')
plt.bar(np.arange(5)+0.15,shop2,width=0.3,color='skyblue')
plt.xticks(np.arange(5),date)
plt.legend(['shop1','shop2'],loc='best')
plt.ylim([0,550])
for i,j in enumerate(shop1):
plt.text(i-0.25,j+10,j)
for i,j in enumerate(shop2):
plt.text(i+0.1,j+10,j)
plt.show()
4.5、多标签条形图 — 叠堆图
shop1 = [100,200,300,450,500]
shop2 = [70,178,245,356,467]
shop_sum = np.array(shop1)+np.array(shop2)
date = ['06-14','06-15','06-16','06-17','06-18']
plt.figure(figsize=(8,4))
plt.bar(date,shop1,color='red')
plt.bar(date,shop2,bottom=shop1,color='skyblue')
plt.legend(['shop1','shop2'],loc='best')
for i,j in enumerate(shop1):
plt.text(i,j-60,j)
for i,j in enumerate(shop_sum):
plt.text(i,j-60,shop2[i])
plt.show()
五、直方图 plt.hist()
hist(x,
bins=None,
range=None,
density=None,
histtype='bar',
align='mid',
orientation='vertical',
color=None,
label=None
)
np.random.seed(0)
x = np.random.randn(500)*10
plt.figure(figsize=(8,4))
plt.hist(x,bins=20,width=2,align='right',color='red',label='直方图')
plt.legend()
plt.show()
六、箱线图 plt.boxplot ()
boxplot(x,
notch=None,
vert=None,
positions=None,
widths=None,
labels=None,
showbox = True,
showmeans =False,
sym='bs'
)
from sklearn.datasets import load_iris
x = load_iris().data
y = load_iris().target
feature = load_iris().feature_names
target = load_iris().target_names
plt.figure(figsize=(6,3))
plt.boxplot(x,labels=feature,positions=[4,2,3,1],widths=[0.2,0.3,0.4,0.5],showbox=True,showmeans =True,sym='bs')
plt.show()