【问题标题】:Matplotlib Scatterplot with 4 visual encondings具有 4 种视觉编码的 Matplotlib 散点图
【发布时间】:2021-03-24 01:14:21
【问题描述】:

第一步是一个包含多列的 pandas 数据框。

我做的第二步是使用 to_numpy() 函数将这个 Dataframe 的一些列转换为 Numpy 数组。

我检索到类似的东西:

[[100 200 3.5 1] [100 200 3.5 1] [100 300 6.2 1] [200 125 4.2 1] [100 300 6.2 1] [100 200 3.5 1]]

第一个元素想象的地方是一个来源 id 第二个元素是命运ID 第三是起源与命运之间的距离 第 4 个只是一个计数器(1 个元素)(我包含它只是因为我认为可能需要计算元素。如果您提出的解决方案不使用它,请忽略它)

我想要一个具有以下规格的散点图:

  • 在 x 轴上的origing_id
  • y 轴上的 destiny_id
  • 散点的颜色以暖色表示 表示两点之间的距离(第三个元素)
  • 的大小 散点取决于 origins_id 对的数量 /destiny_id 我们有。例如我们有三个 100 200
    组合。所以它的尺寸应该比那个大
    只有一个条目的组合 200 125。

我已经尝试过了,但我无法在这个情节中包含所有先决条件。 如何在 matplotlib 中实现这一点?或者有没有其他更简单的直接使用 pandas 的方法?

【问题讨论】:

  • 这是两个不同的任务。一个是为 panda 中的对更新计数器列,另一个是在 matplotlib 中创建一个 4D 图。我建议你在这里专注于一个问题。
  • 我认为这可能是一个误解。计数器列目标仅由 count() 函数之王使用,类似的方法遵循经典的 map-reduce 算法。我刚刚包括在内,以防万一。我的主要问题与情节有关
  • 在这种情况下,我建议您修改示例并更新计数器编号,以明确这不是问题的一部分。
  • 感谢您的反馈。我已经添加了一条评论来澄清它

标签: python pandas matplotlib scatter-plot


【解决方案1】:

如果我正确理解了您的要求,这应该可以解决问题:

import matplotlib.pyplot as plt
import numpy as np

data = np.array([[100,200,3.5,1],[100,200,3.5,1],[100,300,6.2,1],[200,125,4.2,1],[100,300,6.2,1],[100,200,3.5,1]])

unique, counts =  np.unique(data, axis=0,  return_counts=True)  
x = unique[:,0]
y = unique[:,1]
c = unique[:,2]
## figure out a nice looking scaling factor here
#  and remember that the scatter point size is supposed to be an area,
#  hence squaring a base factor is ideal
s = (counts*10)**2 
fig, ax = plt.subplots()

sca = ax.scatter(x,y,c=c,s=s)
plt.colorbar(sca)

plt.show()

产生:

【讨论】:

    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 2021-11-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2013-06-29
    相关资源
    最近更新 更多