使seaborn色调图例对数化

问题描述 投票:0回答:1

我有两个独立的线性变量和一个因指数变量。

x = range(100)
y = range(100)
z = [2**i for i in range(100)]
df = pd.DataFrame({"x":x,"y":y,"z":z})

sns.scatterplot(
    x=df.x,
    y=df.y,
    hue=df.z
)

  1. 如何使色相尺度对数化,以便显示数据中的模式?
  2. 我可以阻止图例以科学计数法显示大数字吗?

Pyplot 仅包含 x 和 y 轴刻度的设置器,我只找到了如何将图例更改为离散值。

python pandas matplotlib seaborn
1个回答
0
投票

对于问题的第一部分:您可以设置seaborn的

hue_norm
函数的
scatterplot
参数。

更改图例中标签的外观可以通过迭代图例的文本对象并更改格式来实现。

两种解决方案相结合:

# %%
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from matplotlib.colors import LogNorm

x = range(100)
y = range(100)
z = [2**i for i in range(100)]
df = pd.DataFrame({"x":x,"y":y,"z":z})

sns.scatterplot(
    x=df.x,
    y=df.y,
    hue=df.z,
    hue_norm=LogNorm()
)

# prevent scientific notation in legend labels
for label in plt.legend().get_texts():
    label.set_text(f"{float(label.get_text()):.0f}")

© www.soinside.com 2019 - 2024. All rights reserved.