Cara memplot nilai daftar python dalam plot berbayang linier dengan gradien warna

Nov 13 2020

Saya tidak yakin apa yang harus disebut plot di bawah ini. Plot Pita 1D?

Pada dasarnya, saya ingin membuat sesuatu seperti ini (plot linier dengan kotak berwarna gradien berdasarkan kelimpahan) dalam daftar. Petunjuk apa pun tentang nama plot semacam itu atau cara memvisualisasikan kelimpahan dalam daftar akan sangat membantu.

Bonus

Jika Anda memiliki pemikiran tentang cara menambahkan teks di atas plot (dari daftar atau objek kamus yang berbeda) seperti gambar yang ditampilkan yang juga akan dihargai

Jawaban

3 xjcl Nov 13 2020 at 05:47

Inilah pendekatan saya berdasarkan pcolor:

import numpy as np
import matplotlib.pyplot as plt

labels = ['All cellular component', 'extracellular region', 'plasm membrane',
          'synapse', 'cell junction', 'cell protection', 'cytoplasmic vesicle',
          'endosome', 'vacuole', 'golgi apparatus', 'endoplasmic reticulum',
          'cytosol', 'mitochondrion', 'nucleus', 'chromosome', 'cytoskeleton',
          'protein-containing complex', 'other components']

# Dummy values based on word length
values = np.array([[len(l) for l in labels]]) - min(map(len, labels))

fig, ax = plt.subplots()
im = ax.pcolor(np.arange(len(labels)+1) - .5, [0, 1],  # center xticks like imshow
               values, cmap='Blues', edgecolors='grey', linewidths=1)
for spine in ax.spines.values():
    spine.set_edgecolor('grey')

ax.set_xticklabels(labels)
ax.set_xticks( np.arange(len(labels)) )  # Show all data
ax.set_yticks([])  # No Y axis

ax.xaxis.tick_top()  # Put labels on top
plt.xticks(rotation=45, ha="left", rotation_mode="anchor")  # Rotate labels 45 deg
plt.axis('scaled')  # square pixels
ax.tick_params(axis='both', which='both', length=0)  # Hide ticks

fig.tight_layout()
plt.show()