Axes de plt.sous-intrigues() est un “numpy.ndarray” objet et n'a pas d'attribut “complot”
Les informations ci-dessous peuvent être superflues si vous êtes à essayer de comprendre le message d'erreur. Veuillez commencer par lire la réponse
par @user707650.
À l'aide de MatPlotLib, je voulais un généralisables script qui crée la suite de mes données.
Une fenêtre contenant un parcelles aménagées de sorte qu'il y a b parcelles par colonne. Je veux être en mesure de changer les valeurs de un et b.
Si j'ai des données pour 2a intrigues secondaires, je veux 2 fenêtres, chacune avec la décrit précédemment "un parcelles disposées selon b parcelles par colonne".
Les données x et y, je suis de traçage sont flotteurs stockées dans np.les tableaux et sont structurés comme suit:
-
Les données x est toujours le même pour toutes les parcelles et est de longueur 5.
'x_vector': [0.000, 0.005, 0.010, 0.020, 0.030, 0.040]
-
La y de données de toutes les parcelles sont stockées dans y_vector où les données de la première parcelle est stocké à des indices de 0 à 5. Les données pour la deuxième parcelle est stocké à l'index de 6 à 11. La troisième parcelle obtient de 12 à 18 ans, la quatrième 19-24, et ainsi de suite.
Au total, pour ce jeu de données, j'ai 91 parcelles (p. 91*6 = 546 valeurs stockées dans y_vector).
Tentative:
import matplotlib.pyplot as plt
# Options:
plots_tot = 14 # Total number of plots. In reality there is going to be 7*13 = 91 plots.
location_of_ydata = 6 # The values for the n:th plot can be found in the y_vector at index 'n*6' through 'n*6 + 6'.
plots_window = 7 # Total number of plots per window.
rows = 2 # Number of rows, i.e. number of subplots per column.
# Calculating number of columns:
prim_cols = plots_window / rows
extra_cols = 0
if plots_window % rows > 0:
extra_cols = 1
cols = prim_cols + extra_cols
print 'cols:', cols
print 'rows:', rows
# Plotting:
n=0
x=0
fig, ax = plt.subplots(rows, cols)
while x <= plots_tot:
ax[x].plot(x_vector, y_vector[n:(n+location_of_ydata)], 'ro')
if x % plots_window == plots_window - 1:
plt.show() # New window for every 7 plots.
n = n+location_of_ydata
x = x+1
J'obtiens l'erreur suivante:
cols: 4
rows: 2
Traceback (most recent call last):
File "Script.py", line 222, in <module>
ax[x].plot(x_vector, y_vector[n:(n+location_of_ydata)], 'ro')
AttributeError: 'numpy.ndarray' object has no attribute 'plot'
OriginalL'auteur Lucubrator | 2016-06-22
Vous devez vous connecter pour publier un commentaire.
Si vous déboguer votre programme, simplement l'impression
ax
, vous trouverez rapidement queax
est un tableau à deux dimensions: une dimension pour les lignes, l'une pour les colonnes.Donc, vous avez besoin de deux indices de l'indice de
ax
pour récupérer la réelleAxesSubplot
exemple, comme:Si vous voulez parcourir les sous-intrigues dans la façon dont vous le faites maintenant, par l'aplatissement de l'
ax
première:et maintenant
ax
est un tableau unidimensionnel. Je ne sais pas si des lignes ou des colonnes sont traversai d'abord, mais si c'est le mal autour de, utiliser la transposition:Bien sûr, maintenant il est plus logique de simplement créer chaque intrigue secondaire sur la mouche, car qui possède déjà un indice, et les deux autres numéros sont fixés: -
Remarque: vous avez
x <= plots_tot
, mais avecx
commençant à 0, vous obtiendrez unIndexError
prochaine avec votre code actuel (après l'aplatissement de votre tableau). Matplotlib est (malheureusement) 1-indexé pour les sous-intrigues. Je préfère utiliser un 0-variable indicée (Python), et juste ajouter+1
pour l'intrigue secondaire de l'index (comme ci-dessus).OriginalL'auteur