matplotlib散点图点大小_你所不知道的图表可视化技巧!最易被忽视却“最精准”—散点图

781cccd5bdb27652596f77ab66e98705.png

当你看到数据想画图表时,你是否能总是第一时间想到折线图、条形图、柱形图、饼图?

至少老海是这样的感觉,不知道为什么总是会不由自主的冷落了最原始最具威力的散点图~

OK,今天老海就专门总结一下散点图的方方面面,也是提醒自己不要忽视可视化中的图表之神

什么是散点图?

散点图,将数据以点的形式展现在XY轴直角坐标系上,精准表达点与点之间的位置关系,从而体现出不同变量之间的相互影响程度。老海认为它是表达数值最精准的图表,没有之一。

散点图体现出的相关关系,有很多情况,具体含义如下图所示:

4f2284636641a23b5effbf73a0a1cd51.png

散点图基本数据样式

我们想制作散点图,就必须存在2个变量,且必须为数值型。第3个变量可以为非数值型变量,作为分组依据

972c87f45d4682e203041fb8da3c5876.png

使用建议

以下是老海给出的散点图使用小建议,避免可视化出现误区。

148153a7fb74553738f6ed80677b0bc9.png
  • 散点图非常适合矩阵式分析方法,比如战略分析中波士顿矩阵(横轴绝对值业绩额,纵轴相对值增长率)、业务四象限分析来确定不同客群或者产品分组等等。
  • 使用散点图时,若样本量非常多体量巨大,则不建议把全部数据都展示在一个图表中,优先选择重点数据来展示
  • 散点图中,我们可以通过形状、颜色、气泡等方式在普通图形的基础上增加数据展示维度
  • 散点图表中可加入直线或曲线(尽可能靠近所有数据点)来辅助分析,并显示当大部分数据点拟合出一定变化趋势时的最佳拟合线或趋势线。

下面开始具体的操作案例

准备工作

0eb1abf23e358e532080275aa65bec20.png
## 初始字体设置,设置好可避免很多麻烦plt.rcParams['font.sans-serif']=['Source Han Sans CN']      # 显示中文不乱码,思源黑体 plt.rcParams['font.size'] = 22                              # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整plt.rcParams['axes.unicode_minus'] = False                  # 显示负数不乱码## 初始化图表大小plt.rcParams['figure.figsize'] = (20.0, 8.0)                # 设置figure_size尺寸## 初始化图表分辨率质量plt.rcParams['savefig.dpi'] = 300                           # 设置图表保存时的像素分辨率plt.rcParams['figure.dpi'] = 300                            # 设置图表绘制时的像素分辨率## 图表的颜色自定义colors = ['#dc2624', '#2b4750', '#45a0a2', '#e87a59',         '#7dcaa9', '#649E7D', '#dc8018', '#C89F91',          '#6c6d6c', '#4f6268', '#c7cccf']plt.rcParams['axes.prop_cycle'] = plt.cycler( color=colors)path = 'D:系列文章'# 自定义文件路径,可以自行设定os.chdir(path)# 设置为该路径为工作路径,一般存放数据源文件

设定图表样式和文件路径

7c05594c52608c76b635155f36452045.png
Financial_data = pd.read_excel('虚拟演示案例数据.xlsx',sheet_name='二维表')Financial_data

读入数据

8fe5363f5d9a4fbedbb284652cc39e52.png
Financial_data = pd.read_excel('虚拟演示案例数据.xlsx',sheet_name='二维表')Financial_data

散点图的基本数据结构

cb78f1304dce980ee8d8a9b97a726046.png

matplotlib—散点图基础画法

8f969abf1a716ec5a36229c9188ea96b.png
plt.scatter('材料', '租金', data=Financial_data)sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

seaborn—散点图画法

0825b1c4d9e0dc6a6908feee5ac18989.png
import seaborn as snssns.regplot('材料', '租金', data=Financial_data,fit_reg=False)sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

seaborn—散点趋势图

ce82cd10ec30ecb571f5a112e737a171.png
import seaborn as snssns.regplot('材料', '租金', data=Financial_data)sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

seaborn—散点趋势图的美化

fe27f9f0e0da529c17e16da669760826.png
import seaborn as snssns.regplot('材料', '租金', data=Financial_data,            marker='*',                                           # 标记的形状            scatter_kws={"color":colors[0],"alpha":0.5,"s":200},  # 标记的颜色、透明度、大小            line_kws={"color":colors[1],"alpha":0.7,"lw":1})      # 散点德 颜色、透明度、粗细sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

seaborn—带数据分组的散点图

9130b69e634daf7674d3bee2a38c7388.png
# 为了方便演示,设置分类标签的数据列,分类一共为3种group_data = np.random.randint(0,3, size = len(Financial_data)) Financial_data['分类'] = group_data ## 初始字体设置,设置好可避免很多麻烦plt.rcParams['font.sans-serif']=['Source Han Sans CN']      # 显示中文不乱码,思源黑体 plt.rcParams['font.size'] = 5                               # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整plt.rcParams['axes.unicode_minus'] = False                  # 显示负数不乱码## 初始化图表大小plt.rcParams['figure.figsize'] = (20.0, 8.0)                # 设置figure_size尺寸import seaborn as snssns.lmplot('材料', '租金',                                   # 设置XY轴的坐标           data=Financial_data,                             # 设置数据源           fit_reg=False,           hue='分类',                                      # 设置分组的字段列           legend=False,                                    # 关闭图例功能           markers=["o", "x", "1"],                         # 设置不同组别的标记           palette=colors[6:9])                             # 设置不同组别的颜色sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()
1673e879cc7a7d83ca3c51b93a86d373.png

seaborn—带数据标签的散点图

dc810adf43f24b9295d740c0db5ff5ee.png
import seaborn as snsplt_one = sns.regplot('材料', '租金', data=Financial_data,            marker='*',                                           # 标记的形状            scatter_kws={"color":colors[0],"alpha":0.5,"s":200},  # 标记的颜色、透明度、大小            line_kws={"color":colors[1],"alpha":0.7,"lw":1})      # 散点德 颜色、透明度、粗细for row_num in range(0,len(Financial_data)):                               # 每个标签都加上数据点位置上     plt_one.text(Financial_data['材料'][row_num]+50,                      # 标签的X轴坐标,加上随机数方便观察                  Financial_data['租金'][row_num]+np.random.randint(5,50), # 标签的Y轴坐标,加上随机数方便观察                  Financial_data['门店城市'][row_num],                     # 标签的具体内容                  horizontalalignment='left',                             # 标签的对齐位置                  size=10,                                                # 标签的字体大小                  color='black',                                          # 标签的颜色                  weight='semibold')sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

seaborn—带直方图的散点图

这类图形的中心部分有三个主要选项:

散点图 (可能有变化),六边形或2D密度图。

同时你可以控制散点的大小、颜色等元素,

同时还可以主图和边际图之间的空间,以及这两个部分之间的大小比例

a82ca0a23ca40205bb290046cd12ebcd.png
## 初始字体设置,设置好可避免很多麻烦plt.rcParams['font.sans-serif']=['Source Han Sans CN']      # 显示中文不乱码,思源黑体 plt.rcParams['font.size'] = 10                               # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整plt.rcParams['axes.unicode_minus'] = False                  # 显示负数不乱码## 初始化图表大小plt.rcParams['figure.figsize'] = (20.0, 8.0)                # 设置figure_size尺寸import seaborn as sns# 此处可以画出多种类型的散点图。通过设置参数kind:“scatter” | “reg” | “resid” | “kde” | “hex”# 特别提示:jointplot的图像大小,不通过figszie来控制,而是通过参数height来控制,且必须为正方形sns.jointplot('材料', '租金', data=Financial_data,              kind='scatter',                                                 # 边际直方图散点图              height=5,              s=50,                                                           # 散点的大小              color=colors[0],                                                # 散点的颜色              edgecolor=colors[1],                                            # 散点的边缘颜色              linewidth=0.5)                                                  # 散点的边缘粗细sns.jointplot('材料', '租金', data=Financial_data,kind='reg')                  # 回归核密度散点图sns.jointplot('材料', '租金', data=Financial_data,kind='resid')                # 回归残差密度散点图sns.jointplot('材料', '租金', data=Financial_data,kind='kde',                  # 2D密度估计散点图              color=colors[2],                                                # 图像的颜色              space=0,                                                        # 散点图与附加图的距离,默认为0无距离              ratio=2)                                                        # 散点图与附加图的比例关系sns.jointplot('材料', '租金', data=Financial_data,                             # 六边形蜂巢散点图              kind='hex',              marginal_kws=dict(bins=100, rug=True))                          # 直方图的分割情况              sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()
f5f6d31a58bfec67915476dd669ebc56.png
a0bc3b38c348a7c84f0673f8401f80e0.png
22aa3cdb017890b7a5303cd88e95539f.png
14fb0d53fc6c22553ffb41c3ad2a1957.png
1cc95f7e412982d146dc5deaec7343fe.png

seaborn—带相关性比较的散点图

显示相关性的散点图,可以确定是否要显示回归线。

在'kind'参数中,指定'reg'进行回归,否则进行分散

import seaborn as snssns.pairplot(data=Financial_data,kind='reg')      # 回归散点图看相关性sns.pairplot(data=Financial_data,kind='scatter')      # 散点图看相关性sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()
2a620b7d064690acd4521abd9112c97d.png
3a1432eb88af76b15cbc328b877740f2.png

seaborn—带分组的相关性比较散点图

您可以自定义所有散点图,就好像它们是单个散点图一样。

seaborn可以轻松地将颜色映射到点,例如,可以研究不同组的行为。

# 为了方便演示,设置分类标签的数据列,分类一共为3种group_data = np.random.randint(0,3, size = len(Financial_data)) Financial_data['分类'] = group_data import seaborn as snssns.pairplot(data=Financial_data,kind='scatter',hue='分类',markers=["o", "s", "D"])      # 设置分组和组别元素形状sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()
0fa4ee3ab588c63cac771b03b4fc012e.png

写在最后

以上就是关于散点图的总结,主要还是偏实操。

关于散点图的具体研究文章,在老海自己的博客中,这里不再赘述。

OK,今天先到这里了,如果觉得喜欢,请动动小手转发和关注一下我们。

我是老海,来自数据炼金术师

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值