使用seaborn 0.11,我想绘制一个seaborn ridge plot
我想在一个图中绘制磁谱数据。因此,y轴仅计算图的数量,x轴使用数据。这是我期望的示例。
这些是不同角度的光谱数据。有什么办法可以在python中绘制类似的东西吗?预先感谢。
import matplotlib.pyplot as plt
data = np.loadtxt("0_deg.txt", skiprows=0, dtype=np.float128)
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(data, markersize=1, label="0° ")
数据看起来像这样
269.09019 0.10781
269.09208 0.10908
269.09397 0.11928
269.09587 0.11800
269.09776 0.11418
269.09966 0.11545
269.10155 0.11928
269.10344 0.11673
269.10534 0.10781
269.10723 0.10526
269.10913 0.11418
269.11102 0.11418
269.11292 0.11291
269.11481 0.11928
269.11670 0.11928
269.11860 0.12055
269.12049 0.11928
269.12239 0.11928
269.12428 0.11673
269.12618 0.11545
269.12807 0.11545
269.12996 0.11036
269.13186 0.10908
269.13375 0.10144
269.13565 0.10908
269.13754 0.10654
269.13943 0.10399
269.14133 0.10526
269.14322 0.11418
269.14512 0.10908
269.14701 0.10272
269.14891 0.09889
269.15080 0.10526
269.15269 0.09889
269.15459 0.09635
269.15648 0.09889
269.15838 0.10017
269.16027 0.09507
269.16217 0.08998
269.16406 0.09507
269.16595 0.08870
269.16785 0.09252
269.16974 0.09762
269.17164 0.09889
269.17353 0.09507
269.17542 0.10017
269.17732 0.10399
269.17921 0.10144
269.18111 0.09762
269.18300 0.10144
269.18490 0.10144
269.18679 0.09635
269.18868 0.10017
269.19058 0.10399
269.19247 0.10017
269.19437 0.10017
269.19626 0.09889
269.19816 0.10017
269.20005 0.09507
269.20194 0.09635
269.20384 0.09380
269.20573 0.09252
269.20763 0.08998
答案 0 :(得分:3)
pathlib
与.glob
一起使用以查找目录中的所有文件list
的{{1}}中
pandas.DataFrames
的值作为每组数据的-1
列值。该值为'label'
,0deg
等。
10deg
作为f = WindowsPath('data/CuSo4_10mV_300mS_Amod9.44V_0deg')
对象
pathlib
是f.suffix
'.44V_0deg'
是f.suffix.split('_')[-1]
'0deg'
列,以便可以为每条绘图线标识正确的'label'
值。'intensity'
组合数据帧列表。pandas.concat
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="white", rc={"axes.facecolor": (0, 0, 0, 0)})
# find the local files
p = Path('c:/somepathtofiles') # p = Path.cwd() # for data in the current working directory
files = list(p.glob('*.44V*'))
# load all the data, but create a dataframe in the correct form for a RidgePlot
dfl = list()
for f in files:
v = pd.read_csv(f, sep='\\s+', header=None, usecols=[1])
v.columns = ['intensity']
v['label'] = f.suffix.split('_')[-1]
dfl.append(v)
# combine the list of dataframes into a single dataframe
df = pd.concat(dfl)
# plot
# Initialize the FacetGrid object
pal = sns.cubehelix_palette(len(df.label.unique()), rot=-.25, light=.7)
g = sns.FacetGrid(df, row="label", hue="label", aspect=15, height=.5, palette=pal)
# Draw the densities in a few steps
g.map(sns.kdeplot, "intensity", bw_adjust=.5, clip_on=False, fill=True, alpha=1, linewidth=1.5)
g.map(sns.kdeplot, "intensity", clip_on=False, color="w", lw=2, bw_adjust=.5)
g.map(plt.axhline, y=0, lw=2, clip_on=False)
# Define and use a simple function to label the plot in axes coordinates
def label(x, color, label):
ax = plt.gca()
ax.text(0, .2, label, fontweight="bold", color=color, ha="left", va="center", transform=ax.transAxes)
g.map(label, "intensity")
# Set the subplots to overlap
g.fig.subplots_adjust(hspace=-.25)
# Remove axes details that don't play well with overlap
g.set_titles("")
g.set(yticks=[])
g.despine(bottom=True, left=True)
# uncomment the following line if there's a tight layout warning
# g.fig.tight_layout()