real - histograma python
Trazar la línea discontinua interrumpida con datos(similar a la gráfica de contorno) (1)
Respuesta rápida y sucia usando annotate
:
import matplotlib.pyplot as plt
import numpy as np
x = list(reversed([1.81,1.715,1.78,1.613,1.629,1.714,1.62,1.738,1.495,1.669,1.57,1.877,1.385]))
y = [0.924,0.915,0.914,0.91,0.909,0.905,0.905,0.893,0.886,0.881,0.873,0.873,0.844]
def plot_with_text(x, y, text, text_count=None):
text_count = (2 * (len(x) / len(text))) if text_count is None else text_count
fig, ax = plt.subplots(1,1)
l, = ax.plot(x,y)
text_size = len(text) * 10
idx_step = len(x) / text_count
for idx_num in range(text_count):
idx = int(idx_num * idx_step)
text_pos = [x[idx], y[idx]]
xscreen = ax.transData.transform(zip(x[max(0, idx-1):min(len(x), idx+2)], y[max(0, idx-1):min(len(y), idx+2)]))
a = np.abs(np.gradient(xscreen)[0][0])
rot = np.rad2deg(np.arctan2(*a)) - 90
ax.annotate(text, xy=text_pos, color="r", bbox=dict(ec="1", fc="1", alpha=0.9), rotation=rot, ha="center", va="center")
plot_with_text(x, y, "test")
Rendimientos:
Puedes jugar con las compensaciones para obtener resultados más agradables.
Estoy atascado con un problema (con suerte) simple. Mi objetivo es trazar una línea discontinua interrumpida con datos (no solo texto).
Como solo descubrí cómo crear una línea discontinua a través de linestyle = ''dashed'' , se agradece cualquier ayuda para colocar los datos entre los guiones.
Algo similar, con respecto al etiquetado, ya existe con Matplotlib, como vi en la demostración de la línea de contorno .
Actualizar:
El enlace a la pregunta mencionado por Richard en los comentarios fue muy útil, pero no fue el 100% como mencioné en los comentarios. Actualmente, lo hago de esta manera:
line_string2 = ''-10 '' + u"/u00b0" +"C"
l, = ax1.plot(T_m10_X_Values,T_m10_Y_Values)
pos = [(T_m10_X_Values[-2]+T_m10_X_Values[-1])/2., (T_m10_Y_Values[-2]+T_m10_Y_Values[-1])/2.]
# transform data points to screen space
xscreen = ax1.transData.transform(zip(T_m10_Y_Values[-2::],T_m10_Y_Values[-2::]))
rot = np.rad2deg(np.arctan2(*np.abs(np.gradient(xscreen)[0][0][::-1])))
ltex = plt.text(pos[0], pos[1], line_string2, size=9, rotation=rot, color=''b'',ha="center", va="bottom",bbox = dict(ec=''1'',fc=''1'', alpha=0.5))
Aquí puedes ver una instantánea del resultado. El menos 20 ° C es sin BBox.