matplotlib
このようなポイントの近くに空白のある線を使用してグラフを作成しようとしています。
(出典:simplystatistics.org)
関数については知っていset_dashes
ますが、終点のダッシュを制御せずに、始点から周期的なダッシュを設定します。
編集:回避策を作成しましたが、結果のプロットは通常の行の集まりであり、単一のオブジェクトではありません。また、別のライブラリpandas
を使用していて、奇妙なことに、期待どおりに機能しません。等しいオフセットが必要ですが、どういうわけか、それらは明らかに長さに関連しています。
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
def my_plot(X,Y):
df = pd.DataFrame({
'x': X,
'y': Y,
})
roffset = 0.1
df['x_diff'] = df['x'].diff()
df['y_diff'] = df['y'].diff()
df['length'] = np.sqrt(df['x_diff']**2 + df['y_diff']**2)
aoffset = df['length'].mean()*roffset
# this is to drop values with negative magnitude
df['length_'] = df['length'][df['length']>2*aoffset]-2*aoffset
df['x_start'] = df['x'] -aoffset*(df['x_diff']/df['length'])
df['x_end'] = df['x']-df['x_diff']+aoffset*(df['x_diff']/df['length'])
df['y_start'] = df['y'] -aoffset*(df['y_diff']/df['length'])
df['y_end'] = df['y']-df['y_diff']+aoffset*(df['y_diff']/df['length'])
ax = plt.gca()
d = {}
idf = df.dropna().index
for i in idf:
line, = ax.plot(
[df['x_start'][i], df['x_end'][i]],
[df['y_start'][i], df['y_end'][i]],
linestyle='-', **d)
d['color'] = line.get_color()
ax.plot(df['x'], df['y'], marker='o', linestyle='', **d)
fig = plt.figure(figsize=(8,6))
axes = plt.subplot(111)
X = np.linspace(0,2*np.pi, 8)
Y = np.sin(X)
my_plot(X,Y)
plt.show()