web-dev-qa-db-ja.com

ConversionError:値を軸の単位に変換できませんでした

84行と3列を含むデータフレームddがあります。

次に、エリアプロットをプロットし、そのインデックスをxticksとして使用するため、次のようにします。

dd.plot(kind='area')
plt.show()

しかし、私はこの結果を得ました: result

(追記:写真を投稿するのに十分な評判がないため、このリンクをここに配置しました。)

一部のxticksは自動的に非表示になっていることがわかります。84のxticksがあるはずですが、そのうちの9つだけが表示されます(自動的に非表示になっているようです)。

同様の質問 here が見つかりましたが、リンクに記載されている方法を試したところ、CnoversionErrorが表示されました。

ConversionError: Failed to convert value(s) to axis units: Index(['!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.',
       '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<',
       '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
       'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
       'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f',
       'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't'],
      dtype='object')

私の質問と上記のリンクの違いは、DataFrameのインデックスにdtype object(これらは文字列)があることであり、インデックスをintのリストに変更すると、エラーはなくなります。

エラーを再現するコード:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

dd=pd.DataFrame(np.random.Rand(84,3),index=[chr(ascii) for ascii in range(33,33+84)])

dd.plot(kind='area',xticks=dd.index)

plt.show()

よろしくお願いします!

5
pyxies

Xticks関数でラベルのインデックス位置を指定する必要があります。ラベルの順序はインデックス位置に従ってください。 xticks関数は3つの引数を取ります。

  1. ticksはラベルのインデックスの位置である必要があります
  2. labels引数はラベル値のリストを取ります
  3. 回転は、ラベルをプロットに表示する方法をとります

    x = df['state'] y = df['sales'] tickvalues = range(0,len(x)) // or tickvalues = df.index plt.figure(figsize = (20,5)) plt.xticks(ticks = tickvalues ,labels = labellist, rotation = 'vertical') plt.plot(x,y)

0
BhavyaPrabha