在不更改任何代码的情况下,绘制的图形将有所不同。在新的 bash 中第一次运行时正确,在接下来的运行中无序。(也许它可以循环回到正确的顺序)
具体来说:环境:MacOS Mojave 10.14.2,通过自制软件安装python3.7.1。
要做:scatter在同axes一个上绘制两组或三组数据,每组都有markertype不同的colors。绘制自定义图例,显示每个图例markertype代表哪个数据集。
很抱歉,我没有足够的时间准备可测试的代码(目前),但这部分似乎是问题所在:
markerTypes = cycle(['o', 's', '^', 'd', 'p', 'P', '*'])
strainLegends = []
strains = list(set([idx.split('_')[0] for idx in pca2Plot.index]))
for strain in strains:
# markerType is fixed here, and shouldn't be passed on to the next python run anyway.
markerType = next(markerTypes)
# strainSamples connects directly to strain variable, then data is generated from getting strainSamples:
strainSamples = [sample for sample in samples if
sample.split('_')[0] == strain]
xData = pca2Plot.loc[strainSamples, 'PC1']
yData = pca2Plot.loc[strainSamples, 'PC2']
# See pictures below, data is correctly identified from source
# both scatter and legend instance use the same fixed markerType
ax.scatter(xData, yData, c=drawColors[strainSamples],
s=40, marker=markerType, zorder=3)
strainLegends.append(Line2D([0], [0], marker=markerType, color='k',
markersize=10,
linewidth=0, label=strain))
# print([i for i in ax.get_children() if isinstance(i, PathCollection)])
ax.legend(handles=strainLegends)
如您所见markerType,strain数据与数据相关联。
对于python3 my_code.py在 bash 中的第一次运行,它创建了一个正确的图片:看到圆圈代表 A,正方形代表 B
B = 正方形。看周围的方块(-3, -3.8)
,这个数据点来自数据集B。
而如果我在同一个终端中再次运行代码,python3 my_code.py
注意 A 和 B 完全聚集在一起,不相关。现在作为图例:A = 正方形,B = 圆形。再次查看(-3, -3.8)来自数据集 B的数据点,现在标注为 A。
如果我再次运行代码,它可能会产生另一个结果。
这是我用来生成注释的代码:
dictColor = {ax: pd.Series(index=pca2Plot.index), }
HoverClick = interactionHoverClick(
dictColor, fig, ax)
fig.canvas.mpl_connect("motion_notify_event", HoverClick.hover)
fig.canvas.mpl_connect("button_press_event", HoverClick.click)
请注意,我注释了打印每个实例的代码。这是经过测试的,因为我认为这可能是在代码的其他部分更改了实例的顺序。但结果显示正确和错误的情况下,顺序都没有改变。
有谁知道发生了什么?有没有人经历过这种情况?如果我需要在代码末尾清理内存,我该怎么办?
BIG阳
POPMUISE
相关分类