数据可视化实战(2)

#任务要求

使用“豆瓣电影数据.xlsx”数据,完成以下任务:

1、制作电影数量折线图(以此命名),横轴为时间,排除2016年的数据,显示标签,标记出最大值信息,将标记的线条颜色设为黑色,线末端使用箭头;

2、绘制 剧情、喜剧、动作 三种类型电影环形图(以此命名),要求空心内部显示三种电影的总记录数(提示:27461),显示电影类型标签及总额百分比;

#电影数量折线图

#matplotlib

1
2
3
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
1
2
df = pd.read_excel('data/豆瓣电影数据.xlsx', index_col=0)
df
1
2
df = df[df['年代']!=2016] # 排除2016年的数据
df
1
2
3
num = df.value_counts('年代')
num = num.sort_index(ascending=False) # 排序
num
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

plt.figure(dpi=150)
plt.plot(num.index, num.values)
plt.ylabel('电影数量')

#文本位置 xytext  ,箭头终点xy
plt.annotate('  最大值\n年代:2012\n数量:'+str(max(num.values)), \
             xy=(2012, max(num.values)), xytext=(1970, max(num.values)-400),\
            arrowprops=dict(facecolor='black', width=1.1, headwidth=4.1, headlength=5)
            )
plt.title('电影数量折线图')
plt.savefig('img/hw21.png')
plt.show()

hw21

#电影类型环形图

#matplotlib

1
2
3
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
1
2
df = pd.read_excel('data/豆瓣电影数据.xlsx', index_col=0)
df

选取对应电影类型的数据。

1
2
df = df[(df['类型']=='剧情')|(df['类型']=='喜剧')|(df['类型']=='动作')]
df

计算电影数量。

1
2
data = df.value_counts('类型')
data
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

plt.pie(x=data.values, labels=data.index, \
        colors=['c', 'springgreen', 'salmon'], autopct='%.0f%%', \
        pctdistance=0.82, labeldistance=1.1,\
        startangle=120, radius=1.2, counterclock=False, \
        wedgeprops={'linewidth': 1.5, 'edgecolor': 'green'}, \
        textprops={'fontsize': 14, 'color': 'black'})

# 中间部分
plt.pie(x=[1], colors='white', radius=0.8, \
        wedgeprops={'linewidth': 1.5, 'edgecolor': 'green'})
# 总量标记
plt.text(0,0, data.values.sum(), fontsize=16, va='center', ha='center')
plt.title('电影类型环形图', pad=20, fontsize=16)
plt.savefig('img/hw22.png')
plt.show()

hw22