Cara membuat plot petak dasar laut
Sep 17 2020
Menggunakan seaborn 0.11, saya ingin membuat plot punggungan seaborn
Saya ingin memplot data spektrum magnetik dalam satu plot. Jadi sumbu y hanya menghitung jumlah plot dan sumbu x menggunakan
Ini adalah data spektrum untuk sudut yang berbeda. Apakah ada cara untuk merencanakan sesuatu seperti ini dengan python? Terima kasih sebelumnya.
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° ")
Data terlihat seperti ini
Data
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
Jawaban
3 TrentonMcKinney Sep 17 2020 at 04:21
Ridge Plot
- Gunakan pathlibdengan
.globuntuk menemukan semua file di direktori - Memuat file ke dalam
listdaripandas.DataFrames- Nama file dipisahkan pada garis bawah, dan menggunakan nilai pada indeks
-1sebagai nilai'label'kolom untuk setiap kumpulan data. Nilai ini0deg,10deg, dll- Label untuk setiap file harus unik, karena baris plot ditentukan oleh label.
- Diberikan
f = WindowsPath('data/CuSo4_10mV_300mS_Amod9.44V_0deg')sebagaipathlibobjekf.suffixaku s'.44V_0deg'f.suffix.split('_')[-1]aku s'0deg'
- Sebuah
'label'kolom ditambahkan sehingga benar'intensity'nilai-nilai dapat diidentifikasi untuk setiap alur cerita.
- Nama file dipisahkan pada garis bawah, dan menggunakan nilai pada indeks
- Gunakan
pandas.concatuntuk menggabungkan daftar kerangka data. - DataFrame untuk petak punggungan harus dalam format panjang (rapi)
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()
Sebelum Pembaruan
import pandas as pd
import matplotlib.pyplot as plt
from pathlib import Path
###########################################################
# Use if loading the data from the local computer
# create the path to the files
p = Path('c:/somepathtofiles')
# if loading the data from the local computer
# get a generator of all the files
files = p.glob('*.44V*')
# load the files into a dict of pandas.DataFrames
dfd = {f'{file.suffix.split("_")[-1]}': pd.read_csv(file, sep='\\s+', header=None) for file in files}
###########################################################
# Use if loading data from GitHub
# don't use both lines for files.
files = [f'https://raw.githubusercontent.com/mahesh27dx/NPR/master/CuSo4_10mV_300mS_Amod9.44V_{v}deg' for v in range(0, 190, 10)]
# load the files into a dict of pandas.DataFrames
dfd = {f'{file.split("_")[-1]}': pd.read_csv(file, sep='\\s+', header=None) for file in files}
###########################################################
# iterate through the dict
plt.figure(figsize=(10, 8)) # set up plot figure
for k, v in dfd.items():
dfd[k].columns = ['mag_field', 'intensity']
sns.lineplot(x='mag_field', y='intensity', data=v, label=k)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.xlabel('Magnetic Field')
plt.ylabel('Field Intensity')
plt.show()
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'