我已经弄清楚如何使matplotlib图表可单击,以便我可以单击一个点并根据该点的元数据创建一个新图,遵循此处的答案。
现在是时候将可点击的绘图放入Panel仪表板中了。明显的举动是将该数字添加到panel.Row. 虽然这显示了该图,但我没有得到交互性。
import matplotlib.pyplot as plt
import panel as pn
class custom_objects_to_plot:
def __init__(self, x, y, name):
self.x = x
self.y = y
self.name = name
a = custom_objects_to_plot(10, 20, "a")
b = custom_objects_to_plot(30, 5, "b")
c = custom_objects_to_plot(40, 30, "c")
d = custom_objects_to_plot(120, 10, "d")
def on_pick(event):
my_fig, my_ax = plt.subplots() # New plot with unique name
my_ax.scatter([1, 2, 3, 4], [5, 6, 7, 8]) # Make the scatterplot
my_fig.show() …Run Code Online (Sandbox Code Playgroud) 我有一组数字(我认为该格式使其成为数据透视表),我想将其转换为“整洁”的数据框。例如,我从左侧的变量 1、顶部的变量 2 和中间的感兴趣值开始,如下所示:
X Y
A 1 2
B 3 4
Run Code Online (Sandbox Code Playgroud)
我想把它变成这样一个整洁的数据框:
V1 V2 value
A X 1
A Y 2
B X 3
B Y 4
Run Code Online (Sandbox Code Playgroud)
行和列顺序对我来说无关紧要,所以以下是完全可以接受的:
value V1 V2
2 A Y
4 B Y
3 B X
1 A X
Run Code Online (Sandbox Code Playgroud)
对于我的第一次尝试,它能够让我得到正确的最终答案,我遍历了行和列。这非常慢,我怀疑 Pandas 中的某些机器会使它运行得更快。
这似乎melt与我寻求的魔法很接近,但它并没有让我一路走到那里。第一个数组变成了这个:
V2 value
0 X 1
1 X 2
2 Y 3
3 Y 4
Run Code Online (Sandbox Code Playgroud)
它摆脱了我的 V1 变量!
没有什么特别之处melt,所以我很乐意阅读使用其他方法的答案,特别是如果melt它并不比我的嵌套循环快多少,而另一个解决方案是。尽管如此,我怎样才能从那个数组转到我想要作为输出的那种整洁的数据框?
示例数据框:
df = pd.DataFrame({"X":[1,3], "Y":[2,4]},index=["A","B"])
Run Code Online (Sandbox Code Playgroud) python ×2
data-science ×1
matplotlib ×1
melt ×1
pandas ×1
panel-pyviz ×1
pivot-table ×1
plot ×1