【问题标题】:How to create a 2D scatterplot with groups from 3 columns numpy array (gpname, x,y)?如何使用来自 3 列 numpy 数组(gpname,x,y)的组创建二维散点图?
【发布时间】:2019-09-23 00:31:09
【问题描述】:

Python 2.7 需要您帮助从 3 维 Numpy 数组创建 2D 散点图,其中 Col0 用于组标签,Col 1 和 2 用于坐标(X,Y)。

Numpy 数组如下所示

array([['A', '4.83186388889', '2.34534666667'],
   ['A', '4.87818611111', '2.80832888889'],
   ['A', '4.82518611111', '2.33834222222'],
   ['B', '4.53763888889', '-11.88424'],
   ['B', '4.503125', '-11.9406266667'],
   ['B', '4.45975555556', '-11.9688044444'],
   ['C', '6.12376666667', '-9.61480888889'],
   ['C', '6.20991666667', '-9.66523111111'],
   ['C', '6.12281388889', '-9.61702222222'],
   ['D', '6.46020833333', '-11.9756488889'],
   ['D', '6.43584166667', '-11.8586622222'],
   ['D', '6.43401111111', '3.88036888889'],
   ....
   dtype='|S21')

不能使用字典,因为它存储唯一键(组),我不知道如何将其转换为具有正确格式的 Pandas DataFrame。

之前尝试过如下所示,即使打印正常,它也不适用于图表。

dataset = pd.DataFrame(**array**, columns = ['Description','X','Y'])
dataset[['X','Y']] = dataset[['X','Y']].apply(pd.to_numeric)

我想为我的所有组标签(A、B、C、...)创建一个 2D 散点图 - 多组坐标 (x,y) - 每组单独的颜色(A、B、C、...)

期待您的帮助。

【问题讨论】:

  • 你有没有一开始就搜索过如何做到这一点?
  • 已搜索,未找到对应的示例。
  • 您也可以使用seaborn,它可以轻松解决您的颜色问题。 seaborn.pydata.org 或 python-graph-gallery.com/scatter-plot 后者几乎完全涵盖了您的用例,包括 matplotlib 解释

标签: python arrays numpy matplotlib scatter-plot


【解决方案1】:

你不需要 pandas 来绘图,只需要 matplotlib。您可以遍历数组并将每个 XY 坐标传递给plt.scatter。您甚至可以使用一种结构(如字典),为每个组定义特定的颜色:

import matplotlib.pyplot as plt

colors = {'A': 'red', 
          'B': 'blue',
          'C': 'green',
          'D': 'black'}    
for group, x, y in array:
    plt.scatter(float(x), float(y), color=colors[group])
plt.show()

编辑:使用它来为每个组动态创建随机颜色,无论有多少:

from random import random
import matplotlib.pyplot as plt

colors = {}    
for group, x, y in array:
    plt.scatter(float(x), float(y), color=colors.setdefault(group, (random(), random(), random())))
plt.show()

【讨论】:

  • 好的,我也在思考如何在图表上包含组的图例,请问它是否应该自动工作?
  • Matplotlib 尝试自动执行此操作。您可以将关键字参数label=group 添加到plt.scatter 调用中,然后在调用plt.show() 之前调用plt.legend() 一次。但这里的问题是会创建重复的图例(每个散点一个)。请参阅this question 以避免这种情况。
猜你喜欢
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2019-03-14
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多