Python数据可视化的10幅图

2017年8月21日 - 花瓣数据

零、导入数据

In [35]:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = pd.read_excel("./dataset.xls")

# 设置中文显示和负号显示
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 设置图形风格
plt.style.use('ggplot')
In [2]:
df
Out[2]:
id 性别 年龄 销售额 体质 收入
0 1 34 123 正常 6000
1 2 40 114 正常 5600
2 3 37 135 肥胖 12000
3 4 30 139 20000
4 5 44 117 微胖 4600
5 6 36 121 肥胖 7400
6 7 32 133 微胖 8500
7 8 26 140 正常 4500
8 9 32 133 11090
9 10 36 133 微胖 7860

一、直方图

In [3]:
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(df['年龄'],bins=7)
plt.title("年龄分布")
plt.xlabel('年龄')
plt.ylabel('员工')
plt.show()

二、箱图

In [4]:
plt.boxplot(df['年龄'])
plt.show()

三、小提琴图

In [5]:
sns.violinplot(df['年龄'],df['性别'])
sns.despine()
plt.show()

四、柱状图

In [6]:
df.groupby('性别')['销售额'].sum()
Out[6]:
性别
女    637
男    651
Name: 销售额, dtype: int64
In [7]:
gender_group_sales = df.groupby('性别')['销售额'].sum()
plt.title("性别销售总额")
plt.xlabel('性别')
plt.ylabel('销售总额')
gender_group_sales.plot(kind='bar')
plt.show()

五、折线图

In [8]:
df.groupby('体质')['销售额'].sum()
Out[8]:
体质
微胖    383
正常    377
瘦     272
肥胖    256
Name: 销售额, dtype: int64
In [9]:
bmi_group_sales = df.groupby('体质')['销售额'].sum()
plt.xlabel('体质')
plt.ylabel('销售额')
plt.title('体质销售总额')
bmi_group_sales.plot(kind='line')
plt.show()

六、堆叠柱状图

In [10]:
df.groupby(['体质','性别'])['销售额'].sum()
Out[10]:
体质  性别
微胖  女     250
    男     133
正常  女     254
    男     123
瘦   女     133
    男     139
肥胖  男     256
Name: 销售额, dtype: int64
In [12]:
bmi_gender_group_sale = df.groupby(['体质','性别'])['销售额'].sum()
bmi_gender_group_sale.unstack().plot(kind='bar',stacked=True,grid=False)
plt.show()

七、散点图

In [13]:
plt.scatter(df['年龄'],df['销售额'])
plt.show()

八、气泡图

In [23]:
plt.figure(figsize=(9,5))
plt.scatter(df['年龄'],df['销售额'],s=df['收入'],alpha=0.8)
plt.show()

九、饼图

In [25]:
df.groupby('性别').sum().stack().unstack()
Out[25]:
id 年龄 销售额 收入
性别
31 174 637 34290
24 173 651 53260
In [27]:
plt.figure(figsize=(5,5))
temp = df.groupby('性别').sum().stack().unstack()
x_list = temp['销售额']
label_list = temp.index
plt.pie(x_list,labels=label_list,autopct="%1.1f%%")
plt.title('男女销售总额占比')
plt.show()

十、热力图

In [34]:
import numpy as np
data = np.random.rand(4,2)
rows = list('1234')
columns = ['男','女']
fig,ax = plt.subplots()
ax.pcolor(data,cmap=plt.cm.Reds,edgecolors='k')
ax.set_xticks(np.arange(0,2)+0.5)
ax.set_yticks(np.arange(0,4)+0.5)
ax.set_xticklabels(columns)
ax.set_yticklabels(rows)
plt.show()