重点就是我们可用使用sizes和colors来改变所有散点的大小和颜色(不同的值表现出不同的程度,颜色的鲜艳,尺寸的大小等)
image.png
image.png
image.png
当然解决方案和前文一样:使用log改变竖轴尺度。
image.png
这里我们就只能调用plt对象在横轴竖轴方向上分别的log了:
image.png
最终效果:
image.png
源码:
# coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
# 使用senborn风格
plt.style.use('seaborn')
'''
# 根据x(水平)和y(竖直)决定的散点图, x和y的秩必须相同
x = [5, 7, 8, 5, 6, 7, 9, 2, 3, 4, 4, 4, 2, 6, 3, 6, 8, 6, 4, 1]
y = [7, 4, 3, 9, 1, 3, 2, 5, 2, 4, 8, 7, 1, 6, 4, 9, 7, 7, 5, 1]
# 对每一个散点设置对应的颜色,大小, 注意对象长度必须和所有散点图数量一致
colors = [7, 5, 9, 7, 5, 7, 2, 5, 3, 7, 1, 2, 8, 1, 9, 2, 5, 6, 7, 5]
sizes = [209, 486, 381, 255, 191, 315, 185, 228, 174,
538, 239, 394, 399, 153, 273, 293, 436, 501, 397, 539]
'''
'''
我们可以对每一个散点设置不同的颜色,大小. 它们数值的大小决定了颜色的深浅,尺寸的大小.
参数c对应colors, 参数s对应sizes, 参数cmap对应具体使用哪一种品系的颜色.
所有可用的cmap:
Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r,
BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r,
Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r,
PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r,
PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r,
Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r,
RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r,
Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr,
YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r,
bone, bone_r, brg, brg_r, bwr, bwr_r, cividis, cividis_r, cool, cool_r, coolwarm,
coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag,
flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat,
gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r,
gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2,
gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, inferno,
inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, nipy_spectral_r,
ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow,
rainbow_r, seismic, seismic_r, spring, spring_r, summer, summer_r, tab10,
tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, terrain, terrain_r,
twilight, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r,
winter, winter_r
plt.scatter(x, y, c=colors, cmap='Greens', s=sizes)
'''
data = pd.read_csv('./data_4.csv')
# 我们数据集以Youtube用户观看的视频总量, 它们喜欢的视频重量,\
# 以及喜欢的视频数量相比于不喜欢的视频数量所占的比例,\
# 并以此比例作为colors(来表现出其是不是经常点击不喜欢还是经常点击喜欢)
view_count, likes, ratio = data['view_count'], data['likes'], data['ratio']
# 强调下edgecolor表示每个散点边缘的颜色, linewidth表示这个散点边缘曲线的厚度,\
# alpha表示这个散点的透明度(用这些可以让散点看上去更美观)
plt.scatter(view_count, likes, c=ratio, cmap='summer',
edgecolor='black', linewidth=1, alpha=0.75)
plt.xscale('log')
plt.yscale('log')
# 可以在最终图象旁边创建一个表示程度的柱状图, 可以更清晰的看出不同颜色表示的是什么意思
cbar = plt.colorbar()
# 给前面程度柱状图旁边设置标签,以表现出具体的意义
cbar.set_label('Like/DisLike Ratio')
plt.title('First scatter.')
plt.xlabel('View count')
plt.ylabel('Total likes')
plt.show()
结果:
image.png