哈Ha! 我将为您呈现George Seif撰写的文章
“您需要了解的有关数据可视化散点图的所有知识”的翻译。
如果您从事数据的分析和可视化,那么很可能将不得不处理散点图。 尽管它很简单,但散点图是用于可视化数据的强大工具。 通过操纵颜色,大小和形状,可以提供散点图的灵活性和代表性。
在本文中,您将学到几乎所有需要使用散点图进行数据可视化的知识。 我们将尝试在python代码中使用时解析所有必要的参数。 您还可以找到一些实用技巧。
回归大厦
即使是散点图的最原始用法,也已经可以很好地概述我们的数据。 在图1中,我们已经可以看到组合数据的孤岛,并快速识别异常值。
图1
适当的回归线从视觉上简化了识别靠近中间点的任务。 在图2中,我们绘制了折线图。 很容易看到在这种情况下线性函数不具有代表性,因为许多点都离直线很远。
图2
图3使用4阶多项式,看起来更有希望。 似乎要对此数据集建模,我们肯定需要一个阶数为4的多项式。
图3
import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset('iris')
点的颜色和形状
颜色和形状可用于可视化数据集中的各种类别。 颜色和形状在视觉上非常清晰。 当您查看一组点具有不同形状的颜色的图形时,很明显这些点属于不同的组。
图4显示了按颜色分组的类。 图5显示了按颜色和形状分隔的类。 在这两种情况下,查看分组都容易得多。 现在我们知道,将
setosa类和我们应该重点关注的部分分开将很容易。 同样清楚的是,单个折线图将无法分隔绿色和橙色点。 因此,我们需要添加一些内容以显示更多尺寸。
颜色和形状之间的选择成为首选。 就个人而言,我觉得颜色更清晰,更直观,但选择始终是您自己的。
图4
图5
import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset('iris')
边际直方图
图6显示了带有边际直方图的图形示例。边际直方图叠加在顶部和侧面,代表对象沿横坐标和纵坐标的点分布。 这个很小的增加对于查明点分布和离群值非常有用。
例如,在图6中,我们显然看到3.0标记附近的点高度集中。 借助此直方图,您可以确定浓度水平。 在右侧,您可以看到3.0标记周围的点数至少是其他任何离散范围的三倍。 同样,使用右侧直方图,可以清楚地识别出明显的离群值在3.75标记之上。 上图显示,沿X轴的点分布更加均匀,但最右边的异常点除外。
图6
import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset('iris') sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='scatter') plt.show()
气泡图
使用气泡图,我们需要使用几个变量来编码信息。 这种可视化类型中固有的新参数是大小。 在图7中,我们显示了根据吃的人的身高和体重所吃的薯条数量。 请注意,散点图只是二维可视化工具,但是当使用气泡图时,我们可以熟练地显示三个维度的信息。
在这里,我们使用
颜色,位置和大小 ,其中气泡的位置确定人的身高和体重,颜色确定性别,大小由所吃的薯条量决定。 气泡图使我们可以方便地将所有属性组合到一个图形中,以便我们可以以二维形式查看大型信息。
图7
import numpy as np import matplotlib.pyplot as plt import matplotlib.patches as mpatches x = np.array([100, 105, 110, 124, 136, 155, 166, 177, 182, 196, 208, 230, 260, 294, 312]) y = np.array([54, 56, 60, 60, 60, 72, 62, 64, 66, 80, 82, 72, 67, 84, 74]) z = (x*y) / 60 for index, val in enumerate(z): if index < 10: color = 'g' else: color = 'r' plt.scatter(x[index], y[index], s=z[index]*5, alpha=0.5, c=color) red_patch = mpatches.Patch(color='red', label='Male') green_patch = mpatches.Patch(color='green', label='Female') plt.legend(handles=[green_patch, red_patch]) plt.title("French fries eaten vs height and weight") plt.xlabel("Weight (pounds)") plt.ylabel("Height (inches)") plt.show()