删除这个 Seaborn 人物中产生的两个传说之一?
Remove one of the two legends produced in this Seaborn figure?
我刚开始使用 seaborn 来制作我的数字。但是我似乎无法删除这里产生的传说之一。
我正在尝试绘制两个相互对比的准确度并沿对角线画一条线,以便更容易看出哪个表现更好(如果有人有更好的方法在 seaborn 中绘制此数据 - 让我知道! ).我想保留的图例是左边的那个,它显示 'N_bands' 的不同颜色和 'Subject No'
的不同形状
ax1 = sns.relplot(y='y',x='x',data=df,hue='N bands',legend='full',style='Subject No.',markers=['.','^','<','>','8','s','p','*','P','X','D','H','d']).set(ylim=(80,100),xlim=(80,100))
ax2 = sns.lineplot(x=range(80,110),y=range(80,110),legend='full')
我已经尝试将 ax1 和 ax2 的 kwarg 图例设置为 'full'、'brief' 和 False(一起和单独),它似乎只删除了左边的那个,或两者都删除了.
我也尝试过使用 matplotlib 删除轴
ax1.ax.legend_.remove()
ax2.legend_.remove()
但这会导致相同的行为(左侧图例消失)。
更新:这是一个您可以自己 运行 的最小示例:
test_data = np.array([[1.,2.,100.,9.],[2.,1.,100.,8.],[3.,4.,200.,7.]])
test_df = pd.DataFrame(columns=['x','y','p','q'], data=test_data)
sns.set_context("paper")
ax1=sns.relplot(y='y',x='x',data=test_df,hue='p',style='q',markers=['.','^','<','>','8'],legend='full').set(ylim=(0,4),xlim=(0,4))
ax2=sns.lineplot(x=range(0,5),y=range(0,5),legend='full')
虽然这并不能完美地重现错误,因为正确的图例是彩色的(我不知道如何重现这个错误——我的数据框的创建方式有什么不同吗?)。但问题的本质仍然存在 - 如何删除右侧的图例但保留左侧的图例?
您正在通过 relplot
生成的 FacetGrid
的(唯一)轴上绘制线图。这是非常不寻常的,所以可能会发生奇怪的事情。
删除 FacetGrid 的图例但保留线图中的图例的一个选项是
g._legend.remove()
完整代码(我还纠正了网格和轴的混淆命名)
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
test_data = np.array([[1.,2.,100.,9.],[2.,1.,100.,8.],[3.,4.,200.,7.]])
test_df = pd.DataFrame(columns=['x','y','p','q'], data=test_data)
sns.set_context("paper")
g=sns.relplot(y='y',x='x',data=test_df,hue='p',style='q',markers=['.','^','<','>','8'], legend='full')
sns.lineplot(x=range(0,5),y=range(0,5),legend='full', ax=g.axes[0,0])
g._legend.remove()
plt.show()
请注意,这是一种 hack,它可能会在未来的 seaborn 版本中崩溃。
另一种选择是在这里不使用 FacetGrid,而只是在一个轴上绘制散点图和线图,
ax1 = sns.scatterplot(y='y',x='x',data=test_df,hue='p',style='q',
markers=['.','^','<','>','8'], legend='full')
sns.lineplot(x=range(0,5),y=range(0,5), legend='full', ax=ax1)
plt.show()
我刚开始使用 seaborn 来制作我的数字。但是我似乎无法删除这里产生的传说之一。
我正在尝试绘制两个相互对比的准确度并沿对角线画一条线,以便更容易看出哪个表现更好(如果有人有更好的方法在 seaborn 中绘制此数据 - 让我知道! ).我想保留的图例是左边的那个,它显示 'N_bands' 的不同颜色和 'Subject No'
的不同形状ax1 = sns.relplot(y='y',x='x',data=df,hue='N bands',legend='full',style='Subject No.',markers=['.','^','<','>','8','s','p','*','P','X','D','H','d']).set(ylim=(80,100),xlim=(80,100))
ax2 = sns.lineplot(x=range(80,110),y=range(80,110),legend='full')
我已经尝试将 ax1 和 ax2 的 kwarg 图例设置为 'full'、'brief' 和 False(一起和单独),它似乎只删除了左边的那个,或两者都删除了.
我也尝试过使用 matplotlib 删除轴
ax1.ax.legend_.remove()
ax2.legend_.remove()
但这会导致相同的行为(左侧图例消失)。
更新:这是一个您可以自己 运行 的最小示例:
test_data = np.array([[1.,2.,100.,9.],[2.,1.,100.,8.],[3.,4.,200.,7.]])
test_df = pd.DataFrame(columns=['x','y','p','q'], data=test_data)
sns.set_context("paper")
ax1=sns.relplot(y='y',x='x',data=test_df,hue='p',style='q',markers=['.','^','<','>','8'],legend='full').set(ylim=(0,4),xlim=(0,4))
ax2=sns.lineplot(x=range(0,5),y=range(0,5),legend='full')
虽然这并不能完美地重现错误,因为正确的图例是彩色的(我不知道如何重现这个错误——我的数据框的创建方式有什么不同吗?)。但问题的本质仍然存在 - 如何删除右侧的图例但保留左侧的图例?
您正在通过 relplot
生成的 FacetGrid
的(唯一)轴上绘制线图。这是非常不寻常的,所以可能会发生奇怪的事情。
删除 FacetGrid 的图例但保留线图中的图例的一个选项是
g._legend.remove()
完整代码(我还纠正了网格和轴的混淆命名)
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
test_data = np.array([[1.,2.,100.,9.],[2.,1.,100.,8.],[3.,4.,200.,7.]])
test_df = pd.DataFrame(columns=['x','y','p','q'], data=test_data)
sns.set_context("paper")
g=sns.relplot(y='y',x='x',data=test_df,hue='p',style='q',markers=['.','^','<','>','8'], legend='full')
sns.lineplot(x=range(0,5),y=range(0,5),legend='full', ax=g.axes[0,0])
g._legend.remove()
plt.show()
请注意,这是一种 hack,它可能会在未来的 seaborn 版本中崩溃。
另一种选择是在这里不使用 FacetGrid,而只是在一个轴上绘制散点图和线图,
ax1 = sns.scatterplot(y='y',x='x',data=test_df,hue='p',style='q',
markers=['.','^','<','>','8'], legend='full')
sns.lineplot(x=range(0,5),y=range(0,5), legend='full', ax=ax1)
plt.show()