dbmikus
He usado Matplotlib para trazar líneas en una figura. Ahora me gustaría establecer el estilo, específicamente el marcador, para puntos individuales en la línea. ¿Cómo hago esto?
Para aclarar mi pregunta, quiero poder establecer el estilo para marcadores individuales en una línea, no para todos los marcadores en dicha línea.
ingenio
Especifique los argumentos de la palabra clave linestyle
y/o marker
en tu llamada a plot
.
Por ejemplo, usando una línea discontinua y marcadores circulares azules:
plt.plot(range(10), linestyle="--", marker="o", color="b", label="line with marker")
plt.legend()
Una llamada de atajo para lo mismo:
plt.plot(range(10), '--bo', label="line with marker")
plt.legend()
Aquí hay una lista de los posibles estilos de línea y marcador:
================ ===============================
character description
================ ===============================
- solid line style
-- dashed line style
-. dash-dot line style
: dotted line style
. point marker
, pixel marker
o circle marker
v triangle_down marker
^ triangle_up marker
< triangle_left marker
> triangle_right marker
1 tri_down marker
2 tri_up marker
3 tri_left marker
4 tri_right marker
s square marker
p pentagon marker
* star marker
h hexagon1 marker
H hexagon2 marker
+ plus marker
x x marker
D diamond marker
d thin_diamond marker
| vline marker
_ hline marker
================ ===============================
editar: con un ejemplo de marcar un subconjunto arbitrario de puntos, como se solicita en los comentarios:
import numpy as np
import matplotlib.pyplot as plt
xs = np.linspace(-np.pi, np.pi, 30)
ys = np.sin(xs)
markers_on = [12, 17, 18, 19]
plt.plot(xs, ys, '-gD', markevery=markers_on, label="line with select markers")
plt.legend()
plt.show()
Este último ejemplo usando el markevery
kwarg es posible desde 1.4+, debido a la fusión de esta rama característica. Si está atascado en una versión anterior de matplotlib, aún puede lograr el resultado superponiendo un diagrama de dispersión en el diagrama de líneas. Consulte el historial de edición para obtener más detalles.
Odín
Hay una imagen que muestra el nombre y la descripción de todos los marcadores, espero que te ayude.
import matplotlib.pylab as plt
markers = ['.',',','o','v','^','<','>','1','2','3','4','8','s','p','P','*','h','H','+','x','X','D','d','|','_']
descriptions = ['point', 'pixel', 'circle', 'triangle_down', 'triangle_up','triangle_left',
'triangle_right', 'tri_down', 'tri_up', 'tri_left', 'tri_right', 'octagon',
'square', 'pentagon', 'plus (filled)','star', 'hexagon1', 'hexagon2', 'plus',
'x', 'x (filled)','diamond', 'thin_diamond', 'vline', 'hline']
x=[]
y=[]
for i in range(5):
for j in range(5):
x.append(i)
y.append(j)
plt.figure(figsize=(8, 8))
for i,j,m,l in zip(x,y,markers,descriptions):
plt.scatter(i,j,marker=m)
plt.text(i-0.15,j+0.15,s=m+' : '+l)
plt.axis([-0.1,4.8,-0.1,4.5])
plt.axis('off')
plt.tight_layout()
plt.show()
perdido
Para futuras referencias – el Line2D
artista devuelto por plot()
también tiene un set_markevery()
método que le permite establecer sólo marcadores en ciertos puntos – ver https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_markevery
Pankaj Joshi
Un truco simple para cambiar la forma y el tamaño de un marcador de punto en particular… es trazarlo primero con todos los demás datos y luego trazar un gráfico más solo con ese punto (o un conjunto de puntos si desea cambiar el estilo de múltiples puntos) . Supongamos que queremos cambiar la forma del marcador del segundo punto:
x = [1,2,3,4,5]
y = [2,1,3,6,7]
plt.plot(x, y, "-o")
x0 = [2]
y0 = [1]
plt.plot(x0, y0, "s")
plt.show()
El resultado es:
Trazar con múltiples marcadores
ricardo roa
hola hay un ejemplo:
import numpy as np
import matplotlib.pyplot as plt
def grafica_seno_coseno():
x = np.arange(-4,2*np.pi, 0.3)
y = 2*np.sin(x)
y2 = 3*np.cos(x)
plt.plot(x, y, '-gD')
plt.plot(x, y2, '-rD')
for xitem,yitem in np.nditer([x,y]):
etiqueta = "{:.1f}".format(xitem)
plt.annotate(etiqueta, (xitem,yitem), textcoords="offset points",xytext=(0,10),ha="center")
for xitem,y2item in np.nditer([x,y2]):
etiqueta2 = "{:.1f}".format(xitem)
plt.annotate(etiqueta2, (xitem,y2item), textcoords="offset points",xytext=(0,10),ha="center")
plt.grid(True)
plt.show()
grafica_seno_coseno()