使用条件的 Matplotlib 文本
Matplotlib text using a condition
我有以下数据框:
data = {'Var1':[3, 8, 4, 2, 13],
'Var2':[5, 7, 9, 10, 15],
'Name':['obs1', 'obs2', 'obs3', 'obs4', 'obs5']}
df1 = pd.DataFrame(data)
然后我根据变量“Name”添加标签:
import seaborn as sns
sns.scatterplot(data=df1,x='Var1',y='Var2')
for i in range(df1.shape[0]):
plt.text(x=df1.Var1[i]+0.3, y=df1.Var2[i]+0.3,s=df1.Name[i],
fontdict=dict(color="black",size=10),
bbox=dict(facecolor="white",alpha=0.5))
结果如下:
现在我想在两种情况下显示标签:
如果观察值高于 14 且低于 8,那么我会显示标签。
你有解决办法吗?
谢谢!
您可以在循环中只使用一个简单的条件。在这里,如果 8continue 关键字跳过循环:
import seaborn as sns
sns.scatterplot(data=df1,x='Var1',y='Var2')
for i in range(df1.shape[0]):
if 8<df1.Var2[i]<14:
continue
plt.text(x=df1.Var1[i]+0.3, y=df1.Var2[i]+0.3,s=df1.Name[i],
fontdict=dict(color="black",size=10),
bbox=dict(facecolor="white",alpha=0.5)
)
输出:
替代代码格式
我借此机会向您展示一种更简洁的代码方式(在我看来):
import seaborn as sns
sns.scatterplot(data=df1,x='Var1',y='Var2')
options = dict(fontdict=dict(color="black",size=10),
bbox=dict(facecolor="white",alpha=0.5))
for i, (x,y,name) in df1.iterrows():
if y<8 or y>14:
plt.text(x=x+0.3, y=y+0.3, s=name, **options)
我有以下数据框:
data = {'Var1':[3, 8, 4, 2, 13],
'Var2':[5, 7, 9, 10, 15],
'Name':['obs1', 'obs2', 'obs3', 'obs4', 'obs5']}
df1 = pd.DataFrame(data)
然后我根据变量“Name”添加标签:
import seaborn as sns
sns.scatterplot(data=df1,x='Var1',y='Var2')
for i in range(df1.shape[0]):
plt.text(x=df1.Var1[i]+0.3, y=df1.Var2[i]+0.3,s=df1.Name[i],
fontdict=dict(color="black",size=10),
bbox=dict(facecolor="white",alpha=0.5))
结果如下:
现在我想在两种情况下显示标签: 如果观察值高于 14 且低于 8,那么我会显示标签。
你有解决办法吗? 谢谢!
您可以在循环中只使用一个简单的条件。在这里,如果 8
import seaborn as sns
sns.scatterplot(data=df1,x='Var1',y='Var2')
for i in range(df1.shape[0]):
if 8<df1.Var2[i]<14:
continue
plt.text(x=df1.Var1[i]+0.3, y=df1.Var2[i]+0.3,s=df1.Name[i],
fontdict=dict(color="black",size=10),
bbox=dict(facecolor="white",alpha=0.5)
)
输出:
替代代码格式
我借此机会向您展示一种更简洁的代码方式(在我看来):
import seaborn as sns
sns.scatterplot(data=df1,x='Var1',y='Var2')
options = dict(fontdict=dict(color="black",size=10),
bbox=dict(facecolor="white",alpha=0.5))
for i, (x,y,name) in df1.iterrows():
if y<8 or y>14:
plt.text(x=x+0.3, y=y+0.3, s=name, **options)