例で示すのが最適です。私はmatplotlibプロットから "プロパティ"フィールドを取っています。これは、異なるキーと値を持つ辞書です。さまざまなデータ型の2つの辞書を値として比較します。
keys = gca().properties().keys
ax1 = gca().properties()
は、それから私は何か他のものをプロットしていると私は今、同じキーがAX2のために有効であると仮定すると、別のインスタンスに
ax2 = gca().properties()
を取る(私は彼らがいると思う、私はプロットタイプを変更していないので、 )、ax1とax2の値をそれぞれどのように比較できますか?これらの値はすべて異なるデータ型であり、単純な比較は機能しません。私は、私は実際には二つのプロットの間で異なっているフィールドの名前と値を見つけたい
Traceback (most recent call last):
File "<ipython-input-46-363fb313494e>", line 2, in <module>
if ax1[key]!=ax2[key]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
を取得するには
for key in keys:
if ax1[key]!=ax2[key]:
print(key,ax1[key])
を試してみました。このような複雑なデータ構造を扱う方法はありますか?
答えは有効ですが、試した後でプロットプロパティが非常に深くネストされていることがわかりました。例えば、線の色は 'gca()。properties()['lines'] [0] .get_color()'です。明示的にプロパティの名前を付けることなく、2つのプロット(ax1とax2)の線の色を比較する方法はありますか?私はすべてのプロパティを比較して、異なるものだけを探したい。 – Aguy
@Theguyはい、これらのデータ型で等価比較が適切に実装されている場合、上記のコードは 'gca()。properties()['lines'] [0]'と比較し、比較は 'False'を返します。等価が適切に実装されていない場合、ほとんど常に 'False'が返されます。いずれにしても動作しない場合や、より詳細な比較が必要な場合は、特殊なケースを追加して手作業で作業を進める必要があります... Pythonには「組み込みの2つの汎用オブジェクトを作成する」ことはありません。 – Bakuriu