matplotlib这是自己学的几天笔记,会有不足之处
一、数据可视化基础:
import numpy as np
data=np.arange(10)
data
plt.plot(data)plt.style.use(‘ggplot’)
plt.legend(‘y’)
plt.title(‘简单可视化’)plt.rcParams[‘font.sans-serif’]=[‘SimHei’]
plt.rcParams[‘axes.unicode_minus’]=Falseplt.xlabel(‘x’)
plt.ylabel(‘y’)plt.annotate(‘标注文字’,xy=(2.5,4))#文字加位置
plt.annotate(‘标注文字2’,xy=(6,6),xytext=(4,8),arrowprops=dict(facecolor=‘black’))
二、散点图
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use(‘ggplot’)
plt.rcParams[‘font.sans-serif’]=‘SimHei’
plt.rcParams[‘axes.unicode_minus’]=False
#读入数据
f=open(‘16-03cars.csv’)
cars = pd.read_csv(f)
#绘图
plt.scatter(cars.speed,#x轴数据为汽车速度
cars.dist,#y轴数据为汽车的刹车距离
s=30,#设置点的大小
c = ‘steelblue’,#设置点的颜色
marker=‘s’,#设置点的形状
alpha = 0.9,#设置点的透明度
linewidths = 0.3,#设置散点边界的粗细
edgecolors =‘red’#设置散点边界的颜色
)#添加轴标签和标题
plt.title(‘汽车速度与刹车距离的关系’)
plt.xlabel(‘汽车速度’)
plt.ylabel(‘刹车距离’)
#去除图边框的顶部刻度和右边刻度
plt.tick_params(top = ‘off’,right = ‘off’)plt.show()
f =open(‘16-04iris.csv’)
iris = pd.read_csv(f)
#自定义颜色
colors =[‘steelblue’,’#9999ff’,’#ff9999’]
#三种不同的花品种
Species=iris.Species.unique()
#通过循环的方式,完成分组散点图的绘制
for i in range(len(Species)):
plt.scatter(iris.loc[iris.SpeciesSpecies[i],‘Petal.Length’],
iris.loc[iris.SpeciesSpecies[i],‘Petal.Width’],
s=35,c=colors[i],label=Species[i])
#添加轴标和标题
plt.title(‘花瓣长度与宽度的关系’)
plt.xlabel(‘花瓣长度’)
plt.ylabel(‘花瓣宽度’)plt.tick_params(top=‘off’,right=‘off’)
#添加图例
plt.legend(loc =‘upper left’)plt.show()
三、箱线图
plt.boxplot(x, notch=None, sym=None, vert=None,
whis=None, positions=None, widths=None,
patch_artist=None, meanline=None, showmeans=None,
showcaps=None, showbox=None, showfliers=None,
boxprops=None, labels=None, flierprops=None,
medianprops=None, meanprops=None,
capprops=None, whiskerprops=None)
x:指定要绘制箱线图的数据;
notch:是否是凹口的形式展现箱线图,默认非凹口;
sym:指定异常点的形状,默认为+号显示;
vert:是否需要将箱线图垂直摆放,默认垂直摆放;
whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
positions:指定箱线图的位置,默认为[0,1,2…];
widths:指定箱线图的宽度,默认为0.5;
patch_artist:是否填充箱体的颜色;
meanline:是否用线的形式表示均值,默认用点来表示;
showmeans:是否显示均值,默认不显示;
showcaps:是否显示箱线图顶端和末端的两条线,默认显示;
showbox:是否显示箱线图的箱体,默认显示;
showfliers:是否显示异常值,默认显示;
boxprops:设置箱体的属性,如边框色,填充色等;
labels:为箱线图添加标签,类似于图例的作用;
filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;
medianprops:设置中位数的属性,如线的类型、粗细等;
meanprops:设置均值的属性,如点的大小、颜色等;
capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
whiskerprops:设置须的属性,如颜色、粗细、线的类型等;
敲代码:
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inlinef = open(‘16-06titanic_train.csv’)
titanic = pd.read_csv(f)#不妨删除含有缺失年龄的观察
titanic.dropna(subset=[‘Age’],inplace=True)plt.style.use(‘ggplot’)
plt.rcParams[‘font.sans-serif’]=‘SimHer’
plt.rcParams[‘axes.unicode_minus’]=False#绘图:整体乘客的年龄箱线图
plt.boxplot(x =titanic.Age,#指定绘图数据
patch_artist=True,#要求用自定义颜色填充
showmeans=True,#以点的形式显示均值
boxprops={‘color’:‘black’,‘facecolor’:’#9999ff’},#设置箱体属性,填充色和边框色
flierprops={‘marker’:‘o’,‘markerfacecolor’:‘red’,‘color’:‘black’},#设置异常值属性,点的形状、填充色和边框色
meanprops={‘marker’:‘D’,‘markerfacecolor’:‘indianred’},#设置均值点的属性,点的形状、填充色
medianprops={‘linestyle’:’–’,‘color’:‘orange’})#设置中位数线的属性,线的类型和颜色
#设置要轴的范围
plt.ylim(0,85)
#去除箱线图的上边框与右边框的刻度标签
plt.tick_params(top=‘off’,right=‘off’)
plt.show()
#按舱级排序,为了后面正常显示分组盒形图的顺序
titanic.sort_values(by=‘Pclass’,inplace=True)
#通过for循环将不同仓位的年龄人群分别存储到列表Age变量中
Age =[]
Levels = titanic.Pclass.unique()
for Pclass in Levels:
Age.append(titanic.loc[titanic.Pclass==Pclass,‘Age’])
#绘图
plt.boxplot(x=Age,
patch_artist=True,
labels=[‘一等舱’,‘二等舱’,‘三等舱’],
showmeans=True,
boxprops={‘color’:‘black’,‘facecolor’:’#9999ff’},
flierprops={‘marker’:‘o’,‘markerfacecolor’:‘red’,‘color’:‘black’},
meanprops={‘marker’:‘D’,‘markerfacecolor’:‘indianred’},
medianprops={‘linestyle’:’–’,‘color’:‘orange’})
plt.show()
四、折线图
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams[‘font.sans-serif’]=‘SimHei’
plt.rcParams[‘axes.unicode_minus’]=Falsedf=pd.read_excel(r’16-08user_analysis.xlsx’)
#设置图框的大小
fig=plt.figure(figsize=(8,4))
#绘图
plt.plot(df[‘时间’],
df[‘新关注人数’])
plt.title(‘公众号每天新增用户数’)
plt.xlabel(‘日期’)
plt.ylabel(‘新增人数’)fig.autofmt_xdate(rotation=45)
plt.show()
fig = plt.figure(figsize=(8,4))
plt.style.use(‘seaborn’)
plt.rcParams[‘font.sans-serif’]=‘SimHei’
plt.rcParams[‘axes.unicode_minus’]=False
plt.plot(
df[‘新关注人数’],
marker =‘o’,
markersize=5,
markerfacecolor=‘mediumpurple’)
plt.plot(
df[‘取消关注人数’],
marker=‘o’,
markersize=5,
markerfacecolor=‘orange’)
plt.title(‘公众号关注情况’)
plt.xlabel(‘日期’)
plt.ylabel(‘新增人数’)
fig.autofmt_xdate(rotatinotallow=45)
plt.legend()
plt.show()
五、直方图
直方图主要反映一维数据分布情况
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel(r’house_data.xlsx’)
df.head()
import matplotlib.pyplot as plt
import matplotlib
%matplotlib inline
#解决中文和负号不正常显示问题
plt.rcParams[‘font.sans-serif’] = ‘SimHei’
plt.rcParams[‘axes.unicode_minus’] = False#绘制条形图
df[‘均价’].plot(kind=‘hist’,color=‘violet’,legend=True,edgecolor = ‘b’,title=‘上海徐汇区二手房均价分布直方图’)
plt.xlabel(‘均价(元)’)
plt.ylabel(‘计数’)
#绘制累积分布直方图alpha=0.4 #透明度
df[‘均价’].plot(kind=‘hist’,cumulative = True,legend=True,edgecolor = ‘k’,alpha=0.4,title=‘上海徐汇区二手房均价累积分布直方图’)
plt.xlabel(‘均价(元)’)
plt.ylabel(‘计数’)