我有一个简短的表,包括三列,两个文本列(第1列和第2列)和一个数字列。我想要一个矩阵/散点图(x和y作为第1列和第2列),标记的大小或标记的颜色作为第3列
我首先使用MultiIndex命令对第1列和第2列求和,因为在这些列中我确实有重复的值。应用此命令后,我确实有一个具有二级索引的新数据框。但是,我可以为索引的每种组合设置一个单独的图(我使用以下链接作为帮助Pandas Plotting with Multi-Index。但是,我想要一个单一图,在x轴上,假设水平= 0,在y轴上,level = 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
任何给我的提示:)
答案 0 :(得分:0)
下面是一个简单的示例:
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()
输出:
答案 1 :(得分:0)
@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')