web-dev-qa-db-ja.com

シーボーンラインプロットに破線をプロットする方法は?

私は単にseabornを使用して破線をプロットしようとしています。これは私が使用しているコードと私が得ている出力です

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

n = 11
x = np.linspace(0,2,n)
y = np.sin(2*np.pi*x)

sns.lineplot(x,y, linestyle='--')
plt.show()

enter image description here

何が悪いのですか?ありがとう

11
crash

_linestyle=_引数はlineplot()では機能しないようで、引数_dashes=_は見た目よりも少し複雑です。

(比較的)簡単な方法は、_ax.lines_を使用してプロット上のLine2Dオブジェクトのリストを取得し、手動で線スタイルを設定することです。

_import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

n = 11
x = np.linspace(0,2,n)
y = np.sin(2*np.pi*x)

ax = sns.lineplot(x,y)

# Might need to loop through the list if there are multiple lines on the plot
ax.lines[0].set_linestyle("--")

plt.show()
_

enter image description here

更新:

dashes引数は、複数の線をプロットするときにのみ適用されるようです(通常、pandas dataframeを使用)。ダッシュは、(セグメント、ギャップ)のタプルであるmatplotlibと同じように指定されますしたがって、タプルのリストを渡す必要があります。

_n = 100
x = np.linspace(0,4,n)
y1 = np.sin(2*np.pi*x)
y2 = np.cos(2*np.pi*x)

df = pd.DataFrame(np.c_[y1, y2]) # modified @Elliots dataframe production

ax = sns.lineplot(data=df, dashes=[(2, 2), (2, 2)])
plt.show()
_

enter image description here

14
DavidG

実際、lineplotを間違った方法で使用しています。 matplotlibplot関数には、seabornのどの関数よりも単純化されたケースの方が適しています。 seabornは、スクリプトへの直接的な介入を少なくしてプロットを読みやすくするためのものであり、pandasデータフレームを処理するときに一般的に最も距離が長くなります

例えば

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

n = 100
x = np.linspace(0,2,n)
y1 = np.sin(2*np.pi*x)
y2 = np.sin(4*np.pi*x)
y3 = np.sin(6*np.pi*x)

df = pd.DataFrame(np.c_[y1, y2, y3], index=x)

ax = sns.lineplot(data=df)
plt.show()

収量

enter image description here

表示しようとしている変数のスタイルをどのように設定するかについては、処理方法がわかりません。

1
Elliot