2024-10-02 02:39:12 发布
网友
我遇到了一些plots (end of page)非常类似于散射/群图,它们抖动y轴以避免重叠点/气泡
如何根据给定的一组x和z值(点大小)获得y值(理想情况下为数组)
我找到了python circlify库,但它不是我想要的
circlify
Example of what I am trying to create
编辑:对于这个项目,我需要能够输出x, y and z值,以便可以在用户选择的工具中绘制它们。因此,我更感兴趣的是生成y坐标的解决方案,而不是实际的绘图
x, y and z
回答: 您在文本中描述的内容被称为swarm plot(或beeswarm plot),并且有这些内容的python实现(esp请参见seaborn),但也有,例如,在R中。也就是说,这些图允许调整每个数据点的y位置,这样它们就不会重叠,但在其他方面是紧密排列的
swarm plot
beeswarm plot
Seaborn swarm plot:
讨论: 但你展示的图不是标准的swarm图(几乎总是有奇怪的“手臂”),而是由某种物理引擎驱动的,这种引擎可以沿x和y移动,从而产生你在图中看到的密集结构(例如,像蜘蛛网上的水滴)
也就是说,在上面的图中,通过想象仅沿垂直轴移动的点,以便更好地打包,你可以看到,在大多数情况下,你无法真正做到这一点。(老实说,可能显示的数据可以压缩得更好一点,但不会有太大的变化,例如,左侧的第一只手臂无法得到改善,如果其中任何一只能够得到改善,那只能向内移动一两个点)。相反,要获得如图所示的绘图,需要在x中进行一些运动,就像某种类型的物理引擎所给出的那样,它希望将x保持在接近其原始值的位置,但也允许一些变化。但这是一个需要在数据级别而不是编程级别上决定的权衡
x
例如,here's一个绘图库RAWGraphs,它生成一个紧凑的蜂群图,就像问题中的政治图:
但关键的是,他们给出了警告: “重要的是要记住,蜂群图使用力来避免视觉模型的单个元素之间的碰撞。这有助于在可视化中看到所有的圆,但也会造成一些情况,圆没有放置在X轴线性比例上它们应该位于的确切位置。”
或者,类似地,在本this D3 package中的注释中:“其他实现使用强制布局,但强制布局模拟自然会试图通过沿两个轴推动数据点来达到平衡,这可能会破坏数据的顺序。”和here's a nice demo based on D3 force layout其中滑块调整将点拉至正确值的相对力
因此,该图是swarm图和Vionish图(显示分布包络的平滑平均值)之间的折衷,但这两个图都给出了数据的真实表示,在这些图中,这些密密麻麻的图表示是以单个数据点的x位置错误表示为代价的。它们的优点似乎是,您可以对各个点进行着色和单击(如果需要,您可以在其中提供实际的x数据,尽管链接图中没有这样做)
Seaborn violin plot:
就个人而言,我真的很犹豫是否以某种未知的方式歪曲数据(这是物理引擎计算的结果,但对读者来说并不明显)。也许更好的折衷方案是用非圆形补丁填充小提琴,或者类似于Raincloud plot的东西
我创建了an Observable notebook来计算具有可变大小圆的蜂群图的y值。下图给出了一个结果示例
如果需要在脚本中使用JavaScript代码,那么复制和粘贴AccurateBeeswarm类的代码应该很简单
AccurateBeeswarm
该算法简单地将点逐个放置,尽可能靠近x=0线,同时避免重叠。还可以选择添加一点随机性来改善外观。x值永远不会改变;这是该方法相对于RAWGraphs使用的力定向算法的一大优势
回答:
您在文本中描述的内容被称为
swarm plot
(或beeswarm plot
),并且有这些内容的python实现(esp请参见seaborn),但也有,例如,在R中。也就是说,这些图允许调整每个数据点的y位置,这样它们就不会重叠,但在其他方面是紧密排列的Seaborn swarm plot:
讨论:
但你展示的图不是标准的swarm图(几乎总是有奇怪的“手臂”),而是由某种物理引擎驱动的,这种引擎可以沿x和y移动,从而产生你在图中看到的密集结构(例如,像蜘蛛网上的水滴)
也就是说,在上面的图中,通过想象仅沿垂直轴移动的点,以便更好地打包,你可以看到,在大多数情况下,你无法真正做到这一点。(老实说,可能显示的数据可以压缩得更好一点,但不会有太大的变化,例如,左侧的第一只手臂无法得到改善,如果其中任何一只能够得到改善,那只能向内移动一两个点)。相反,要获得如图所示的绘图,需要在
x
中进行一些运动,就像某种类型的物理引擎所给出的那样,它希望将x保持在接近其原始值的位置,但也允许一些变化。但这是一个需要在数据级别而不是编程级别上决定的权衡例如,here's一个绘图库RAWGraphs,它生成一个紧凑的蜂群图,就像问题中的政治图:
但关键的是,他们给出了警告:
“重要的是要记住,蜂群图使用力来避免视觉模型的单个元素之间的碰撞。这有助于在可视化中看到所有的圆,但也会造成一些情况,圆没有放置在X轴线性比例上它们应该位于的确切位置。”
或者,类似地,在本this D3 package中的注释中:“其他实现使用强制布局,但强制布局模拟自然会试图通过沿两个轴推动数据点来达到平衡,这可能会破坏数据的顺序。”和here's a nice demo based on D3 force layout其中滑块调整将点拉至正确值的相对力
因此,该图是swarm图和Vionish图(显示分布包络的平滑平均值)之间的折衷,但这两个图都给出了数据的真实表示,在这些图中,这些密密麻麻的图表示是以单个数据点的x位置错误表示为代价的。它们的优点似乎是,您可以对各个点进行着色和单击(如果需要,您可以在其中提供实际的x数据,尽管链接图中没有这样做)
Seaborn violin plot:
就个人而言,我真的很犹豫是否以某种未知的方式歪曲数据(这是物理引擎计算的结果,但对读者来说并不明显)。也许更好的折衷方案是用非圆形补丁填充小提琴,或者类似于Raincloud plot的东西
我创建了an Observable notebook来计算具有可变大小圆的蜂群图的y值。下图给出了一个结果示例
如果需要在脚本中使用JavaScript代码,那么复制和粘贴
AccurateBeeswarm
类的代码应该很简单该算法简单地将点逐个放置,尽可能靠近x=0线,同时避免重叠。还可以选择添加一点随机性来改善外观。x值永远不会改变;这是该方法相对于RAWGraphs使用的力定向算法的一大优势
相关问题 更多 >
编程相关推荐