如何将数据绘制为 2x 2 矩阵

Posted

技术标签:

【中文标题】如何将数据绘制为 2x 2 矩阵【英文标题】:How to plot data as 2x 2 matrix 【发布时间】:2019-11-06 02:54:03 【问题描述】:

我有一个简短的表格,包括三列、两个文本列(第 1 列和第 2 列)和一个数字列。我想要一个矩阵/散点图(x 和 y 作为第 1 列和第 2 列)和标记的大小或标记的颜色作为第三列

我首先使用 MultiIndex 命令对第 1 列和第 2 列求和,因为在这些列中我确实有重复值。应用此命令后,我确实有一个具有两级索引的新数据框。但是,我可以为索引的每个组合拟合一个单独的图(我使用以下链接作为帮助Pandas Plotting with Multi-Index。但是,我想要一个图,在 x 轴上假设级别 = 0,在 y 轴级别 = 1 和标记大小 = 第三列

    import pandas as pd
    data=pd.read_excel(path)
    new_frame=data.set_index(["Col 1", "Col 2"])
    new_frame.xs("High Humidity").plot(kind="bar")
    new_frame.xs("Low Humidity").plot(kind="bar")

使用我的代码,我只能对所有组合的绘图进行编码。但如前所述,我想有一个图,其中 x 轴是 Col 1,y 轴 Col 2 和标记大小 = col 3

给我的任何提示:)

【问题讨论】:

【参考方案1】:

@Zaraki,

我想我找到了一个至少可以满足我需求的工作。我加了两个

columns, data["numerical Col 1"]=np.nan and data["numerical Col 2"]=np.nan

然后我在框架中循环并创建了 if 条件

import pandas as pd
import sys
import matplotlib.pyplot as plt
import numpy as np
data=pd.read_excel(r"C:\Users\116225\Desktop\test_table.xlsx")
data["numerical Col 1"]=np.nan
data["numerical Col 2"]=np.nan
for i in range(len(data["Col 1"])):
    if data.at[i,"Col 1"]=="Low Humidity":
        data.at[i,"numerical Col 1"]=np.random.randint(0,20)
    else:
        data.at[i,"numerical Col 1"]=np.random.randint(21,41)

    if data.at[i,"Col 2"]=="Pulsmax":
        data.at[i,"numerical Col 2"]=np.random.randint(0,20)
    else:
        data.at[i,"numerical Col 2"]=np.random.randint(21,41)

new_frame=data.copy()

x1, y1 = [20, 20], [0, 45]
x2, y2 = [-1, 45], [20, 20]
plt.plot(x1,y1,x2,y2,c="red")
plt.scatter(x=new_frame["numerical Col 1"],y=new_frame["numerical Col    2"],s=new_frame["Col 3"]*1e-3)
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')

在屏幕截图中,您可以看到散点图,其中两条线表示边界 :)

【讨论】:

很高兴你找到了另一个解决方案:)【参考方案2】:

这是一个简单的例子:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame('Col1':['HH','HH','LH','LH'],'Col2':['P','P','P','HT2'],'Col3':[15,20,4,5])

# get data
x = df['Col1']
y = df['Col2']
marker_sizes = df['Col3']

# plot data
fig, ax = plt.subplots()
ax.scatter(x, y, marker='o', s=marker_sizes)
plt.show()

输出:

【讨论】:

嘿 Zaraki,非常感谢您的评论。但是,如果我尝试您的代码,我得到“无法将字符串转换为浮点数:'HT2'” @SMS 在我的环境中一切正常。您测试了我的示例还是对代码进行了一些更改? 我只是复制粘贴你的想法:),但我收到错误消息 @SMS 你用的是什么python版本和库版本? @ Zaraki,我使用以下 Anaconda 版本 3.6.1 |Anaconda 4.4.0 (64-bit)| (默认,2017 年 5 月 11 日,13:25:24)[MSC v.1900 64 位 (AMD64)]

以上是关于如何将数据绘制为 2x 2 矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何在MATLAB中将3列矩阵绘制为颜色图?

如何在 Tensorflow 中为预取数据集绘制混淆矩阵

10,25,50,100,250,500,1000 如何找到要在图中绘制的序列方程

如何在python中使用修改后的输出大小绘制混淆矩阵并输出为.svg图像?

从.csv文件拆分数据并绘制图表

使用 sklearn 使用 Keras 数据生成器绘制混淆矩阵