一、整理数据
1
2
3
|
import pandas as pd
cnbodf=pd.read_excel('cnboo1.xlsx')
cnbodfsort=cnbodf.sort_values(by=['BO'],ascending=False)
|
1
2
3
4
|
def mkpoints(x,y):
return len(str(x))*(y/25)-3
cnbodfsort['points']=cnbodfsort.apply(lambda x:mkpoints(x.BO,x.PERSONS),axis=1)
|
1
2
3
4
|
cnbodfgb=cnbodfsort.groupby("TYPE").mean(["bo","prices","persons","points"])
cnbodfsort['type1']=cnbodfsort['TYPE'].apply(lambda x:x.split("/")[0])
cnbodfgb=cnbodfsort.groupby(["type1"])["ID","BO","PRICE","PERSONS","points"].mean()
cnbodfgbsort=cnbodfgb.sort_values("BO",ascending=False)
|
1
|
cnbodfsort.sort_values(by='PERSONS') # 根据电影人数进行排序
|
1
2
3
4
5
6
7
8
9
10
|
from matplotlib import pyplot as plt
plt.style.use('classic') # 画板主题风格
plt.figure(figsize=(9,6))
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 使用微软雅黑的字体
plt.title("中国票房分布情况") # 标题
plt.scatter(cnbodfsort.PERSONS,cnbodfsort.PRICE) # 散点图
plt.grid() # 网格线
plt.show()
|
二、修改点的样式
1
2
3
4
5
6
7
8
9
10
|
from matplotlib import pyplot as plt
plt.style.use('classic')
plt.figure(figsize=(9,6))
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 使用微软雅黑的字体
plt.title("中国票房分布情况")
plt.scatter(cnbodfsort.PERSONS,cnbodfsort.PRICE,c='red',edgecolor='pink',s=100,linewidth=4)
plt.grid()
plt.show()
|
三、呈现半透明的状态
1
2
3
4
5
6
7
8
9
10
|
from matplotlib import pyplot as plt
plt.style.use('classic')
plt.figure(figsize=(9,6))
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 使用微软雅黑的字体
plt.title("中国票房分布情况")
plt.scatter(cnbodfsort.PERSONS,cnbodfsort.PRICE,c='red',edgecolor='black',s=100,linewidth=4,alpha=0.5)
plt.grid()
plt.show()
|
注意到当数据较为集中的时候,点的颜色较深,如果数据分布较稀疏的时候,点更透明。
四、点呈现多彩的颜色
由于我一共有五十组数据,也就是有50个点,因此当构建colors的时候必须有五十个。
1
2
3
4
5
6
7
8
9
10
11
|
from matplotlib import pyplot as plt
plt.style.use('classic')
plt.figure(figsize=(9,6))
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 使用微软雅黑的字体
plt.title("中国票房分布情况")
colors=[1,2,3,4,5,6,7,8,9,10]*5
plt.scatter(cnbodfsort.PERSONS,cnbodfsort.PRICE,c=colors,edgecolor='black',s=100,linewidth=4,alpha=0.5)
plt.grid()
plt.show()
|
五、让点的大小不一
1
2
3
4
5
6
7
8
9
10
11
12
|
from matplotlib import pyplot as plt
plt.style.use('classic')
plt.figure(figsize=(9,6))
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 使用微软雅黑的字体
plt.title("中国票房分布情况")
colors=[1,2,3,4,5,6,7,8,9,10]*5
sizes=cnbodfsort.points*10
plt.scatter(cnbodfsort.PERSONS,cnbodfsort.PRICE,c=colors,edgecolor='black',s=sizes,linewidth=4,alpha=0.5)
plt.grid()
plt.show()
|
也可以通过使用numpy数组来进行实现:
1
|
sizes=list(np.random.randint(100,500,size=(50,)))
|
如果让点变回同色系,则使:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import numpy as np
from matplotlib import pyplot as plt
plt.style.use('classic')
plt.figure(figsize=(9,6))
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 使用微软雅黑的字体
plt.title("中国票房分布情况")
colors=[1,2,3,4,5,6,7,8,9,10]*5
sizes=list(np.random.randint(100,500,size=(50,)))
plt.scatter(cnbodfsort.PERSONS,cnbodfsort.PRICE,cmap='summer',edgecolor='black',s=sizes,linewidth=4,alpha=0.5)
cbar=plt.colorbar()
cbar.set_label("票房")
plt.xscale('log')
plt.xscale('log')
plt.grid()
plt.show()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import numpy as np
from matplotlib import pyplot as plt
plt.style.use('classic')
plt.figure(figsize=(9,6))
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 使用微软雅黑的字体
plt.title("中国票房分布情况")
colors=[1,2,3,4,5,6,7,8,9,10]*5
sizes=list(np.random.randint(100,500,size=(50,)))
plt.scatter(cnbodfsort.PERSONS,cnbodfsort.PRICE,cmap='winter',c=cnbodfsort.PERSONS,edgecolor='black',s=sizes,linewidth=4,alpha=0.5)
cbar=plt.colorbar()
cbar.set_label("票房")
plt.xscale('log')
plt.xscale('log')
plt.grid()
plt.show()
|
六、侧边呈现颜色卡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import numpy as np
from matplotlib import pyplot as plt
plt.style.use('classic')
plt.figure(figsize=(9,6))
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 使用微软雅黑的字体
plt.title("中国票房分布情况")
colors=[1,2,3,4,5,6,7,8,9,10]*5
sizes=list(np.random.randint(100,500,size=(50,)))
plt.scatter(cnbodfsort.PERSONS,cnbodfsort.PRICE,c=colors,edgecolor='black',s=sizes,linewidth=4,alpha=0.5)
cbar=plt.colorbar()
cbar.set_label("票房")
plt.grid()
plt.show()
|
七、改变集中性
1
2
|
plt.xscale('log')
plt.xscale('log')
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import numpy as np
from matplotlib import pyplot as plt
plt.style.use('classic')
plt.figure(figsize=(9,6))
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 使用微软雅黑的字体
plt.title("中国票房分布情况")
colors=[1,2,3,4,5,6,7,8,9,10]*5
sizes=list(np.random.randint(100,500,size=(50,)))
plt.scatter(cnbodfsort.PERSONS,cnbodfsort.PRICE,c=colors,edgecolor='black',s=sizes,linewidth=4,alpha=0.5)
cbar=plt.colorbar()
cbar.set_label("票房")
plt.xscale('log')
plt.xscale('log')
plt.grid()
plt.show()
|
可以看到横坐标轴发生了变化。
|