数据可视化
程序员文章站
2024-02-12 17:59:10
...
离散变量的可视化
# 1、饼图
# 使用matplotlib模块
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 显示正负号
plt.style.use('ggplot')
%matplotlib inline
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']
# 绘制饼图
plt.pie(x=edu,labels=labels,autopct='%.1f%%')
plt.legend()
plt.title('饼图')
# 美化饼图
explode = [0,0.1,0,0,0] # 指定突出部分
plt.axes(aspect='equal') # 使显示的是圆而不是椭圆
plt.pie(x=edu, labels=labels, autopct='%.2f%%', explode=explode, wedgeprops={'edgecolor':'black'})
plt.legend(loc='upper right',bbox_to_anchor=(1.2,1.2)) # 既可以显示图列,也可以控制图列的位置
plt.title('饼图')
# 用pandas绘制饼图
import pandas as pd
data = pd.Series({'中专':0.2515,'大专':0.3724,'本科':0.3336,'硕士':0.0368,'其他':0.0057})
# 将序列名称设置为空字符
data.name=''
# 控制饼图为正圆
plt.axes(aspect='equal')
# 用pandas自带的plot绘制饼图
data.plot(kind='pie',autopct='%.2f%%',title='pandas饼图',wedgeprops={'edgecolor':'black'})
plt.legend(loc='upper right',bbox_to_anchor=(1.2,1.2))
# 2、条形图
# 使用matplotlib模块
data = pd.read_excel('./Province GDP 2017.xlsx')
plt.bar(left=range(data.shape[0]),height=data.GDP,tick_label=data.Province,color='steelblue')
# plt.legend()
plt.ylabel('GDP/万亿')
plt.xlabel('地区')
plt.title('条形图')
# 用pandas模块
data.GDP.plot(kind='bar',color='steelblue',title='pandas绘制条形图')
plt.ylabel('GDP')
plt.xlabel('地区')
# 添加x轴刻度
plt.xticks(range(len(data.Province)),data.Province)
plt.title('pandas条形图')
# 用seaborn模块绘制条形图
import seaborn as sns
sns.barplot(x=data.Province,y=data.GDP,data=data,color='steelblue')
plt.xlabel('省份')
plt.title('seaborn模块绘制条形图')
连续型数据可视化
# 3、直方图
# 使用matplotlib模块
data = pd.read_csv('./titanic_train.csv')
data.Age.isnull().sum()/data.shape[0]
data.dropna(subset=['Age'],inplace=True)
# 绘制直方图
plt.hist(x=data.Age,bins=30,color='steelblue',edgecolor='black')
plt.xlabel('年龄')
plt.ylabel('频数')
plt.title('乘客年龄分布')
# 使用pandas模块
data.Age.plot(kind='hist',bins=20,color='steelblue',edgecolor='black',normed=True,label='直方图')
data.Age.plot(kind='kde',color='red',label='核密度图')
plt.xlabel('年龄')
plt.ylabel('和密度值')
plt.title('乘客年龄分布图')
plt.legend()
# 通过seaborn绘制直方图
data_man = data.Age[data.Sex=='male']
data_woman = data.Age[data.Sex=='female']
sns.distplot(data_man,bins=20,kde=False,label='man')
sns.distplot(data_woman,bins=20,kde=False,hist_kws={'color':'steelblue'},label='woman')
plt.legend()
plt.title('男女乘客的直方图')
# 男女核密度图
sns.distplot(data_man,hist=False,label='man')
sns.distplot(data_woman,hist=False,kde_kws={'color':'black','linestyle':'--'},label='woman')
plt.legend()
plt.title('男女乘客核密度图')
# 箱型图
# matplotlib模块
data = pd.read_excel('./sec_buildings.xlsx')
plt.boxplot(x=data.price_unit)
plt.title('二手房单价分布箱型图')
# 二手房在各个区域的平均单价
group_region = data.groupby('region')
import numpy as np
avg_price = group_region.agg({'price_unit':np.mean}).sort_values('price_unit',ascending=False)
region_price = []
for region in avg_price.index:
region_price.append(data.price_unit[data.region==region])
plt.boxplot(x=region_price)
plt.title('不同行政区二手房单价')
# 使用seaborn模块
sns.boxplot(x='region',y='price_unit',data=data,order=avg_price.index)
# 小提琴图
sns.violinplot(x='day',y='total_bill',hue='sex',data=data,split=True,palette='RdBu')
plt.title('小提琴图')
# 折线图
data = pd.read_excel('./wechat.xlsx')
plt.plot(data.Date,data.Counts,linestyle='-',linewidth=2,color='steelblue',marker='o',markersize=5)
plt.plot(data.Date,data.Times,linestyle='--')
# 使用pandas模块
data = pd.read_excel('./weather.xlsx')
# 统计每月最高气温
data = data.pivot_table(index='month',columns='year',values='high')
data.plot(kind='line',style = ['-','--',':'])
plt.xlabel('月份')
plt.ylabel('气温')
plt.title('每月平均最高气温波动折线图')
# 散点图
data = pd.read_csv('./iris.csv')
plt.scatter(x=data.Petal_Width,y=data.Petal_Length,color='steelblue',edgecolor='black')
plt.xlabel('花瓣宽度')
plt.ylabel('花瓣长度')
plt.title('关系散点图')
# 使用pandas模块
data.plot(x='Petal_Width',y='Petal_Length',kind='scatter',title='关系散点图',edgecolor='black')
# 使用seaborn模块
sns.lmplot(x='Petal_Width',y='Petal_Length',hue='Species',data=data,legend_out=False,truncate=True)
plt.title('散点关系图')