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

Python 如何将数据绘制为2x 2矩阵,python,pandas,matrix,plot,Python,Pandas,Matrix,Plot,我有一个简短的表格,包括三列,两个文本列(第1列和第2列)和一个数字列。我想有一个矩阵/散点图(x和y作为第1列和第2列),标记大小或标记颜色作为第3列 我首先使用MultiIndex命令对第1列和第2列求和,因为在这些列中我确实有重复的值。在应用这个命令之后,我有了一个具有两级索引的新数据帧。但是,我可以为索引的每个组合设置一个单独的绘图(我使用以下链接作为帮助。但是,我想要一个单独的绘图,在x轴上,比如说标高=0,在y轴上,标高=1,标记大小=第三列) 使用我的代码,我只能对所有组合的绘图

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

我首先使用MultiIndex命令对第1列和第2列求和,因为在这些列中我确实有重复的值。在应用这个命令之后,我有了一个具有两级索引的新数据帧。但是,我可以为索引的每个组合设置一个单独的绘图(我使用以下链接作为帮助。但是,我想要一个单独的绘图,在x轴上,比如说标高=0,在y轴上,标高=1,标记大小=第三列)

使用我的代码,我只能对所有组合的绘图进行编码。但正如前面提到的,我希望有一个x轴为1列、y轴为2列、标记大小为3列的绘图


给我的任何提示:)

下面是一个简单的示例:

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

我想我找到了一份至少能满足我需求的工作。我又加了两个

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')
在屏幕截图上,您可以看到散点图,其中有两条线表示边界:)

嘿,扎拉基,非常感谢你的评论。然而,如果我尝试您的代码,我得到“无法将字符串转换为浮点:'HT2'”@SMS在我的环境中一切正常。您测试了我的示例,或者在代码中做了一些更改?我只是复制粘贴了您的想法:),但我得到了错误message@SMS您使用的python版本和库版本是什么?@Zaraki,我使用以下Anaconda版本3.6.1 | Anaconda 4.4.0(64位)|(默认,2017年5月11日,13:25:24)[MSC v.1900 64位(AMD64)]很高兴您找到了另一个解决方案:)
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')