利用Matplotlib、Pandas和Seaborn进行数据可视化
1. Matplotlib的网格线与属性设置
在Matplotlib中添加网格线的方式有些特别。通常我们可能期望有
get_grid
和
set_grid
方法,但实际上只有
grid
方法,它接受一个布尔值作为第一个参数来开启或关闭网格线。每个坐标轴都有主要刻度和次要刻度,默认情况下次要刻度是关闭的,
which
参数用于选择哪种类型的刻度具有网格线。
以下是相关代码示例及解释:
# 示例代码,假设已经有了Axes对象ax
# 添加网格线
ax.grid(True) # 开启网格线
# 设置网格线属性
ax.grid(True, linewidth=1, color='gray', linestyle='--') # 设置线宽、颜色和样式
我们还可以通过
properties
方法查看绘图对象的所有可能属性,以坐标轴对象为例:
ax.xaxis.properties()
输出结果可能如下:
{'alpha': None,
'gridlines': <a list of 4 Line2D gridline objects>,
'label': Text(0.5,22.2,'X Axis'),
'label_position': 'bottom',
'label_text': 'X Axis',
'tick_padding': 3.5,
'tick_space': 26,
'ticklabels': <a list of 4 Text major ticklabel objects>,
'ticklocs': array([ 0.2 , 0.4 , 0.55, 0.93]),
'ticks_position': 'bottom',
'visible': True}
2. 使用Matplotlib可视化电影预算趋势
2.
.
..........
下面我们将通过可视化数据可视化..
.
.
.
.
.
..
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
以下是具体的操作步骤:
1. 读取电影数据集:
```python
import pandas as pd
movie = pd.read_csv('data/movie.csv')
```
2. 计算每年的中位数预算并进行平滑处理:
```python
med_budget = movie.groupby('title_year')['budget'].median()
med_budget_roll = med_budget.rolling(5, min_periods=1).mean()
```
3. 可视化处理:
```python
import matplotlib.pyplot as plt
plt.plot(med_budget_roll.index, med_budget_roll.values)
plt.xlabel('Year')
plt.ylabel('Median Budget')
plt.title('Median Movie Budget Over Time')
plt.show()
```
#### 1. Matplotlib网格线与属性设置
在Matplotlib中,添加网格线的方式较为特别。通常我们可能期望有`get_grid`和`set_grid`方法,但实际上只有`grid`方法,它接受一个布尔值作为第一个参数来开启或关闭网格线。每个坐标轴都有主要刻度和次要刻度,默认情况下次要刻度是关闭的。
每个坐标轴都有主要刻度和次要刻度,这些刻度可以通过`rolling`方法进行平滑处理。在Matplotlib中,我们可以使用`grid`方法来开启或关闭网格线。
以下是具体的操作步骤:
1. 读取电影数据集。
2. 计算每年的中位数预算。
3. 对中位数预算进行平滑处理。
4. 可视化处理后的中位数预算。
以下是具体的代码示例:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取电影数据集
movie = pd.read_csv('data/movie.csv')
# 计算每年的中位数预算
med_budget = movie.groupby('title_year')['budget'].median()
# 对中位数预算进行平滑处理
med_budget_roll = med_budget.rolling(5, min_periods=1).mean()
# 可视化处理后的中位数预算
plt.plot(med_budget_roll.index, med_budget_roll.values)
plt.xlabel('Year')
plt.ylabel('Median Budget')
plt.title('Median Movie Budget Over Time')
plt.show()
2. 使用Matplotlib进行数据可视化
Matplotlib是一个强大的Python库,用于创建各种类型的图表和可视化。它提供了丰富的功能和方法,可以满足不同的可视化需求。
在这个示例中,我们使用Matplotlib来可视化电影预算的中位数随时间的变化。具体步骤如下:
1. 读取电影数据集。
2. 计算每年的中位数预算。
3. 对中位数预算进行平滑处理。
4. 可视化处理后的中位数预算。
以下是具体的代码示例:
import pandas as pd
import matplotlib.pyplot as plt
# 读取电影数据集
movie = pd.read_csv('data/movie.csv')
# 计算每年的中位数预算
med_budget = movie.groupby('title_year')['budget'].median()
# 对中位数预算进行平滑处理
med_budget_roll = med_budget.rolling(5, min_periods=1).mean()
# 可视化处理后的中位数预算
plt.plot(med_budget_roll.index, med_budget_roll.values)
plt.xlabel('Year')
plt.ylabel('Median Budget')
plt.title('Median Movie Budget Over Time')
plt.show()
3. 可视化电影预算趋势的详细步骤
为了更详细地展示可视化电影预算趋势的过程,我们可以将步骤进一步细化。具体步骤如下:
1.
读取数据
:使用
pandas
库的
read_csv
函数读取电影数据集。
2.
计算中位数预算
:使用
groupby
方法按年份分组,并计算每年的中位数预算。
3.
平滑处理
:使用
rolling
方法对中位数预算进行平滑处理,以减少数据的波动。
4.
可视化
:使用
matplotlib
库的
plot
函数绘制平滑后的中位数预算随时间的变化曲线。
5.
添加标签和标题
:使用
xlabel
、
ylabel
和
title
方法为图表添加标签和标题,使其更具可读性。
6.
显示图表
:使用
show
方法显示绘制好的图表。
以下是具体的代码示例:
import pandas as pd
import matplotlib.pyplot as plt
# 读取电影数据集
movie = pd.read_csv('data/movie.csv')
# 计算每年的中位数预算
med_budget = movie.groupby('title_year')['budget'].median()
# 对中位数预算进行平滑处理
med_budget_roll = med_budget.rolling(5, min_periods=1).mean()
# 可视化处理后的中位数预算
plt.plot(med_budget_roll.index, med_budget_roll.values)
plt.xlabel('Year')
plt.ylabel('Median Budget')
plt.title('Median Movie Budget Over Time')
plt.show()
4. 总结
通过以上步骤,我们可以清晰地看到电影预算的中位数随时间的变化趋势。Matplotlib提供了丰富的功能和方法,可以帮助我们创建各种类型的图表和可视化,满足不同的需求。在实际应用中,我们可以根据具体情况选择合适的方法和参数,以达到最佳的可视化效果。
利用Matplotlib、Pandas和Seaborn进行数据可视化(下)
3. 深入分析数据与进一步可视化
在前面的步骤中,我们已经完成了电影预算中位数的计算和平滑处理,并进行了初步的可视化。接下来,我们将深入分析数据,并进行进一步的可视化。
3.1 分析电影数量与预算的关系
我们发现电影预算中位数在2000年左右达到峰值后开始下降,推测这可能与每年的电影数量有关。为了验证这一推测,我们需要分析电影数量与预算之间的关系。
# 计算每年的电影数量
movie_count = movie.groupby('title_year')['budget'].count()
# 可视化电影数量随时间的变化
plt.plot(movie_count.index, movie_count.values)
plt.xlabel('Year')
plt.ylabel('Number of Movies')
plt.title('Number of Movies per Year')
plt.show()
3.2 结合电影数量和预算进行可视化
为了更直观地展示电影数量和预算之间的关系,我们可以将两者结合起来进行可视化。
# 计算每年的中位数预算
med_budget = movie.groupby('title_year')['budget'].median()
# 对中位数预算进行平滑处理
med_budget_roll = med_budget.rolling(5, min_periods=1).mean()
# 可视化电影数量和预算随时间的变化
plt.plot(movie_count.index, movie_count.values, label='Number of Movies')
plt.plot(med_budget_roll.index, med_budget_roll.values, label='Median Budget')
plt.xlabel('Year')
plt.ylabel('Value')
plt.title('Number of Movies and Median Budget Over Time')
plt.legend()
plt.show()
4. 结论与展望
通过对电影数据的分析和可视化,我们可以得出以下结论:
- 电影预算中位数在2000年左右达到峰值后开始下降。
- 电影数量随时间的变化趋势与预算中位数的变化趋势可能存在一定的关联。
未来的工作可以进一步深入分析电影数量和预算之间的具体关系,例如建立数学模型来预测电影预算的变化趋势。同时,我们还可以考虑其他因素对电影预算的影响,如电影类型、市场需求等,以更全面地了解电影行业的发展。
在实际应用中,我们可以根据这些分析结果为电影制作公司、投资者等提供决策参考,帮助他们更好地规划电影项目和投资策略。
总结
本文详细介绍了如何利用Matplotlib、Pandas和Seaborn进行数据可视化,以电影数据集为例,展示了从数据读取、处理到可视化的完整过程。通过对电影预算和数量的分析,我们可以更深入地了解电影行业的发展趋势。同时,我们还介绍了如何进行深入的数据分析和可视化,以及如何根据分析结果进行决策和展望未来。
注意事项
-
在使用
rolling方法进行平滑处理时,需要根据数据的特点选择合适的窗口大小。 - 在可视化过程中,要注意图表的可读性和美观性,合理设置标签、标题和图例。
- 在分析数据时,要考虑到各种因素的影响,避免片面地得出结论。
参考资源
- Matplotlib官方文档:https://matplotlib.org/
- Pandas官方文档:https://pandas.pydata.org/
- Seaborn官方文档:https://seaborn.pydata.org/
利用Matplotlib、Pandas和Seaborn进行数据可视化(下)
3. 深入分析数据与进一步可视化
在前面的步骤中,我们已经完成了电影预算中位数的计算和平滑处理,并进行了初步的可视化。接下来,我们将深入分析数据,并进行进一步的可视化。
3.1 分析电影数量与预算的关系
我们发现电影预算中位数在2000年左右达到峰值后开始下降,推测这可能与每年的电影数量有关。为了验证这一推测,我们需要分析电影数量与预算之间的关系。具体操作步骤如下:
1. 计算每年的电影数量:使用
groupby
方法按年份分组,然后统计每个组中
budget
列的数量。
2. 可视化电影数量随时间的变化:使用
matplotlib
的
plot
函数绘制电影数量随年份的变化曲线。
# 计算每年的电影数量
movie_count = movie.groupby('title_year')['budget'].count()
# 可视化电影数量随时间的变化
plt.plot(movie_count.index, movie_count.values)
plt.xlabel('Year')
plt.ylabel('Number of Movies')
plt.title('Number of Movies per Year')
plt.show()
3.2 结合电影数量和预算进行可视化
为了更直观地展示电影数量和预算之间的关系,我们可以将两者结合起来进行可视化。具体步骤如下:
1. 计算每年的中位数预算并进行平滑处理。
2. 分别绘制电影数量和中位数预算随时间的变化曲线,并添加图例。
# 计算每年的中位数预算
med_budget = movie.groupby('title_year')['budget'].median()
# 对中位数预算进行平滑处理
med_budget_roll = med_budget.rolling(5, min_periods=1).mean()
# 可视化电影数量和预算随时间的变化
plt.plot(movie_count.index, movie_count.values, label='Number of Movies')
plt.plot(med_budget_roll.index, med_budget_roll.values, label='Median Budget')
plt.xlabel('Year')
plt.ylabel('Value')
plt.title('Number of Movies and Median Budget Over Time')
plt.legend()
plt.show()
以下是这个过程的mermaid流程图:
graph LR
A[读取电影数据] --> B[计算每年电影数量]
B --> C[可视化电影数量变化]
A --> D[计算每年中位数预算]
D --> E[平滑处理中位数预算]
B --> F[结合电影数量和预算可视化]
E --> F
4. 聚焦高预算电影分析
上述分析是基于所有电影的情况,为了进一步探究中位数预算下降的原因,我们可以聚焦于每年预算最高的10部电影。
4.1 计算高预算电影的滚动中位数
# 找出每年预算最高的10部电影并计算其中位数
top10 = movie.sort_values('budget', ascending=False) \
.groupby('title_year')['budget'] \
.apply(lambda x: x.iloc[:10].median() / 1e6)
# 对结果进行5年滚动平均平滑处理
top10_roll = top10.rolling(5, min_periods=1).mean()
4.2 创建新图表展示数据
由于高预算电影的数值与所有电影的数值差距较大,我们创建一个新的包含两个子图的图表来展示数据。
# 创建包含两个子图的图表
fig2, ax_array = plt.subplots(2, 1, figsize=(14, 8), sharex=True)
ax1 = ax_array[0]
ax2 = ax_array[1]
# 在第一个子图中绘制所有电影的预算和电影数量
ax1.plot(years, budget, linestyle='--', linewidth=3, color='.2', label='All Movies')
ax1.bar(years_5, ct_norm_5, 3, facecolor='.5', alpha=.3, label='Movies per Year')
ax1.legend(loc='upper left')
ax1.set_xlim(1968, 2017)
plt.setp(ax1.get_xticklines(), visible=False)
for x, y, v in zip(years_5, ct_norm_5, ct_5):
ax1.text(x, y + .5, str(v), ha='center')
# 在第二个子图中绘制高预算电影的预算
ax2.plot(years, top10_roll.values, color='.2', label='Top 10 Movies')
ax2.legend(loc='upper left')
# 设置图表布局和标题
fig2.tight_layout()
fig2.suptitle('Median Movie Budget', y=1.02, **text_kwargs)
fig2.text(0, .6, 'Millions of Dollars', rotation='vertical', ha='center', **text_kwargs)
# 保存图表
import os
path = os.path.expanduser('~/Desktop/movie_budget.png')
fig2.savefig(path, bbox_inches='tight')
5. Pandas绘图方法介绍
Pandas使得绘图变得非常容易,它通过自动处理许多过程来简化绘图操作。Pandas的绘图功能是基于Matplotlib实现的,其绘图方法实际上是对Matplotlib的封装。当使用Pandas进行绘图时,会返回一个Matplotlib的
Axes
或
Figure
对象,我们可以使用Matplotlib的全部功能对其进行修改,以达到期望的效果。
Pandas只能生成Matplotlib可用绘图的一小部分,如折线图、条形图、箱线图、散点图、核密度估计(KDE)和直方图等。Pandas在创建这些图表时表现出色,通常只需一行代码,在探索数据时能节省大量时间。
5.1 理解绘图方法所需变量
理解Pandas绘图的关键之一是了解绘图方法需要一个还是两个变量来创建图表。例如:
| 绘图类型 | 所需变量数量 | 说明 |
| ---- | ---- | ---- |
| 折线图、散点图 | 2个 | 默认使用索引作为x轴,列值作为y轴 |
| 条形图 | 2个 | 需要一些x坐标来定位条形,另一个变量作为条形的高度 |
| 箱线图、直方图、KDE | 1个 | 忽略索引,对每个变量进行转换或聚合来创建图表 |
5.2 Pandas绘图示例
以下示例展示了如何使用Pandas创建一个随机选择的2000年以后的100部电影的IMDB评分与年份的散点图,每个点的大小与预算成正比。
# 选择需要的列并去除缺失值
cols = ['budget', 'title_year', 'imdb_score', 'movie_title']
m = movie[cols].dropna()
m['budget2'] = m['budget'] / 1e6
# 随机选择100部2000年以后的电影
np.random.seed(0)
movie_samp = m.query('title_year >= 2000').sample(100)
# 创建图表
fig, ax = plt.subplots(figsize=(14, 6))
# 绘制散点图
ax.scatter(x='title_year', y='imdb_score', s='budget2', data=movie_samp)
# 标注最低和最高评分的电影
idx_min = movie_samp['imdb_score'].idxmin()
idx_max = movie_samp['imdb_score'].idxmax()
for idx, offset in zip([idx_min, idx_max], [.5, -.5]):
year = movie_samp.loc[idx, 'title_year']
score = movie_samp.loc[idx, 'imdb_score']
title = movie_samp.loc[idx, 'movie_title']
ax.annotate(xy=(year, score),
xytext=(year + 1, score + offset),
s=title + ' ({})'.format(score),
ha='center',
size=16,
arrowprops=dict(arrowstyle="fancy"))
# 设置标题和网格线
ax.set_title('IMDB Score by Year', size=25)
ax.grid(True)
总结
本文围绕利用Matplotlib、Pandas进行电影数据可视化展开,详细介绍了从数据读取、处理到可视化的全过程。通过对电影预算和数量的分析,我们深入了解了电影行业的发展趋势。同时,还介绍了如何使用Pandas进行绘图以及如何深入分析数据。在实际应用中,我们可以根据具体需求选择合适的工具和方法,以达到最佳的可视化和分析效果。
注意事项
-
在使用Matplotlib的
rolling方法进行平滑处理时,要根据数据特点选择合适的窗口大小,不同的窗口大小会对平滑效果产生不同的影响。 - 在可视化过程中,要注重图表的可读性和美观性,合理设置标签、标题和图例,使图表能够清晰地传达信息。
- 在分析数据时,要全面考虑各种因素的影响,避免片面地得出结论,确保分析结果的准确性和可靠性。
超级会员免费看

被折叠的 条评论
为什么被折叠?



