Python 编程和分组依据
Python programming and group by
我已经很长了table,这里有一个例子:
而我想要的是根据图像编号绘制。在图上以 1、2、3 和散点 x y(在第 2 列和第 3 列中给出)坐标给出。颜色应根据类型,例如 Green 表示 P,红色表示 F 等等。
此外,我希望它们单独绘制而不是在图表中并像 image.1 image2 和 image 3 一样保存它们。
请提出可能的解决方案。
我做了分组,现在卡在这里了。
我到目前为止所做的如下:
for index, group in data.groupby(['image number']):
group.plot(x='x',y='y', label=index, kind='scatter')
请帮我根据MP列在绘图中添加颜色。
据我了解,您的 dataframe
看起来像这样:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([
{"number": 1, "x": 2391, "y": 1994, "MP": "PP"},
{"number": 1, "x": 530, "y": 2707, "MP": "PP"},
{"number": 1, "x": 467, "y": 3208, "MP": "PP"},
{"number": 2, "x": 952, "y": 656, "MP": "PE"},
{"number": 2, "x": 3678, "y": 1409, "MP": "PE"},
{"number": 3, "x": 2950, "y": 177, "MP": "PMMA"},
{"number": 3, "x": 1039, "y": 306, "MP": "f"},
{"number": 3, "x": 2726, "y": 1827, "MP": "PMMA"},
{"number": 3, "x": 3578, "y": 2129, "MP": "PMMA"},
{"number": 3, "x": 3708, "y": 3624, "MP": "f"},
# rest of dataframe entries...
])
如果您想使用 matplotlib
绘制这些粒子的散点图,您只需遍历数据框并使用 plt.scatter
绘制单个粒子,如下所示:
scheme = {
"PP": "m", # PP is magenta
"PE": "g", # PE is green
"PMMA": "c", # PMMA is cyan
"f": "r", # f is red
# put more colours here...
}
def plot_single(df, num, scheme):
for i in range(len(df.index)):
if df["number"][i] == num:
plt.scatter(x=df["x"][i], y=df["y"][i], c = scheme[df["MP"][i]] if df["MP"][i] in scheme else "k")
# V change these as needed V
plt.title("Particle "+str(num))
plt.xlabel("x")
plt.ylabel("y")
# ^ change these as needed ^
plt.show()
例如,如果您使用 dataframe
的小片段尝试 plot_single(df, 1, scheme)
,您将得到此图:
要进一步自定义散点图,您可以添加 legend, change the colour scheme, tinker with the scatter plot 等
编辑:
如果你想把所有的散点图都放在一张图上,你可以用这样的函数来实现:
def plot_all(df, scheme):
for i in range(len(df.index)):
plt.scatter(x=df["x"][i], y=df["y"][i], c = scheme[df["MP"][i]] if df["MP"][i] in scheme else "k")
plt.title("All Particles")
plt.xlabel("x")
plt.ylabel("y")
plt.show()
您可以通过在 shell 中输入 plot_all(df, scheme)
来调用它。
我已经很长了table,这里有一个例子:
而我想要的是根据图像编号绘制。在图上以 1、2、3 和散点 x y(在第 2 列和第 3 列中给出)坐标给出。颜色应根据类型,例如 Green 表示 P,红色表示 F 等等。
此外,我希望它们单独绘制而不是在图表中并像 image.1 image2 和 image 3 一样保存它们。
请提出可能的解决方案。
我做了分组,现在卡在这里了。
我到目前为止所做的如下:
for index, group in data.groupby(['image number']):
group.plot(x='x',y='y', label=index, kind='scatter')
请帮我根据MP列在绘图中添加颜色。
据我了解,您的 dataframe
看起来像这样:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([
{"number": 1, "x": 2391, "y": 1994, "MP": "PP"},
{"number": 1, "x": 530, "y": 2707, "MP": "PP"},
{"number": 1, "x": 467, "y": 3208, "MP": "PP"},
{"number": 2, "x": 952, "y": 656, "MP": "PE"},
{"number": 2, "x": 3678, "y": 1409, "MP": "PE"},
{"number": 3, "x": 2950, "y": 177, "MP": "PMMA"},
{"number": 3, "x": 1039, "y": 306, "MP": "f"},
{"number": 3, "x": 2726, "y": 1827, "MP": "PMMA"},
{"number": 3, "x": 3578, "y": 2129, "MP": "PMMA"},
{"number": 3, "x": 3708, "y": 3624, "MP": "f"},
# rest of dataframe entries...
])
如果您想使用 matplotlib
绘制这些粒子的散点图,您只需遍历数据框并使用 plt.scatter
绘制单个粒子,如下所示:
scheme = {
"PP": "m", # PP is magenta
"PE": "g", # PE is green
"PMMA": "c", # PMMA is cyan
"f": "r", # f is red
# put more colours here...
}
def plot_single(df, num, scheme):
for i in range(len(df.index)):
if df["number"][i] == num:
plt.scatter(x=df["x"][i], y=df["y"][i], c = scheme[df["MP"][i]] if df["MP"][i] in scheme else "k")
# V change these as needed V
plt.title("Particle "+str(num))
plt.xlabel("x")
plt.ylabel("y")
# ^ change these as needed ^
plt.show()
例如,如果您使用 dataframe
的小片段尝试 plot_single(df, 1, scheme)
,您将得到此图:
要进一步自定义散点图,您可以添加 legend, change the colour scheme, tinker with the scatter plot 等
编辑:
如果你想把所有的散点图都放在一张图上,你可以用这样的函数来实现:
def plot_all(df, scheme):
for i in range(len(df.index)):
plt.scatter(x=df["x"][i], y=df["y"][i], c = scheme[df["MP"][i]] if df["MP"][i] in scheme else "k")
plt.title("All Particles")
plt.xlabel("x")
plt.ylabel("y")
plt.show()
您可以通过在 shell 中输入 plot_all(df, scheme)
来调用它。