Python 在Seaborn情节中获得乳胶符号,而不会弄乱查询
我构建了一个Python 在Seaborn情节中获得乳胶符号,而不会弄乱查询,python,pandas,seaborn,Python,Pandas,Seaborn,我构建了一个数据帧,如下所示: import pandas as pd import seaborn as sns import matplotlib.pyplot as plt df = pd.DataFrame({ "x": [0, 1, 0, 1], "y": [1, 2, 1.5, 3], "sigma": [1, 1, 2, 2], }) sns.lineplot(data=df.rename({"sigma": SIGMA}, axis=1), x="x"
数据帧
,如下所示:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame({
"x": [0, 1, 0, 1],
"y": [1, 2, 1.5, 3],
"sigma": [1, 1, 2, 2],
})
sns.lineplot(data=df.rename({"sigma": SIGMA}, axis=1), x="x", y="y", hue=SIGMA, legend="full")
它支持nice查询
功能:
# OK!
pts = df.query("sigma < 2")
print(pts)
但我意识到我更喜欢乳胶符号\sigma
,而不是图例中的“sigma”。Matplotlib可以渲染它。我试着:
SIGMA = "$\\sigma$"
df = pd.DataFrame({
"x": [0, 1, 0, 1],
"y": [1, 2, 1.5, 3],
SIGMA: [1, 1, 2, 2],
})
plt.clf()
sns.lineplot(data=df, x="x", y="y", hue=SIGMA, legend="full")
plt.show()
阴谋仍然有效。但是现在如果我尝试查询:
# Fails!
pts = df.query(SIGMA + " < 2")
print(pts)
有没有办法:
我想要一个。如果可能的话,因为这会使查询看起来更干净。您可以这样绘制:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame({
"x": [0, 1, 0, 1],
"y": [1, 2, 1.5, 3],
"sigma": [1, 1, 2, 2],
})
sns.lineplot(data=df.rename({"sigma": SIGMA}, axis=1), x="x", y="y", hue=SIGMA, legend="full")
这将在将列传递给绘图函数之前将其重命名为SIGMA
,因此绘图函数看到的是一个名为“$\\SIGMA$”
的列
默认情况下,rename
返回原始数据帧的副本,而不修改原始数据帧,因此这允许您在其他上下文中正常地将数据帧与列“sigma”
一起使用。但是,缺点是,如果数据很大,创建新的数据帧可能会影响性能。在这种情况下,您可以编写一个函数,在适当的位置重命名列,进行打印,然后在末尾恢复名称。编写一个自定义函数来封装您可能希望合并到绘图中的各种调整,而不破坏实际数据,这通常不是一个坏主意