9

私はプレゼンテーションの準備をしています.3D matplotlib図の例がいくつかあります. ただし、投影された画像ではグリッド線が明るすぎて見えません。 3D 画像の例

2D フィギュアで機能する grid-method を使用してみました。

points = (5*np.random.randn(3, 50)+np.tile(np.arange(1,51), (3, 1))).transpose()
fig = plt.figure(figsize = (10,10))
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(points[:,0], points[:,1], points[:,2])
ax.view_init(elev=0., azim=0)
ax.set_ylim([0, 60])
ax.set_zlim([0, 60])
ax.set_xlim([0, 60])
ax.set_zlabel('Cytokine')
ax.set_ylabel('Parameter')
ax.grid(linewidth=20)

しかし、それは 3D フィギュアではうまくいかないようです。助言がありますか?

4

4 に答える 4

16

すべての線を太くしても構わない場合は、デフォルトの rc 設定を調整できます。

次のようなグラフがあるとします。

ここに画像の説明を入力

追加できます:

import matplotlib as mpl
mpl.rcParams['lines.linewidth'] = 2

すべての線のデフォルトの線幅を増やすには、次の結果を得ます。

ここに画像の説明を入力

別の方法として、これが見苦しい場合は、次を使用できます。

ax.w_xaxis.gridlines.set_lw(3.0)
ax.w_yaxis.gridlines.set_lw(3.0)
ax.w_zaxis.gridlines.set_lw(3.0)

各軸の線幅を 3.0 に調整し、以下を生成します。

ここに画像の説明を入力

色を更新してグリッド線が実際にポップするようにするには、次を追加できます。

ax.w_xaxis._axinfo.update({'grid' : {'color': (0, 0, 0, 1)}})
ax.w_yaxis._axinfo.update({'grid' : {'color': (0, 0, 0, 1)}})
ax.w_zaxis._axinfo.update({'grid' : {'color': (0, 0, 0, 1)}})

生成するもの:

ここに画像の説明を入力

メソッドはかなりハックですが、私の知る限り、これらの結果を達成する簡単な方法はありません!! お役に立てれば; さらにサポートが必要な場合はお知らせください。

于 2013-07-29T16:45:34.730 に答える
3

残念ながら、これは公開されていないようです。ソースを見ると、重要な内部変数は call_AXINFOであり、慎重にサブクラス化することでオーバーライドできます。

ここに画像の説明を入力

Figure の作成後にこのコードを追加し、 dict でスタイルを設定しますcustom_AXINFO

from mpl_toolkits.mplot3d import Axes3D
import mpl_toolkits.mplot3d.axis3d as axis3d

# New axis settings
custom_AXINFO = {
    'x': {'i': 0, 'tickdir': 1, 'juggled': (1, 0, 2),
          'color': (0.00, 0.00, 0.25, .75)},
    'y': {'i': 1, 'tickdir': 0, 'juggled': (0, 1, 2),
          'color': (0.20, 0.90, 0.90, 0.25)},
    'z': {'i': 2, 'tickdir': 0, 'juggled': (0, 2, 1),
          'color': (0.925, 0.125, 0.90, 0.25)},}

class custom_XAxis(axis3d.Axis):
    _AXINFO = custom_AXINFO

class custom_YAxis(axis3d.Axis):
    _AXINFO = custom_AXINFO

class custom_ZAxis(axis3d.Axis):
    _AXINFO = custom_AXINFO

class custom_Axes3D(Axes3D):
    def _init_axis(self):
        '''Init 3D axes; overrides creation of regular X/Y axes'''
        self.w_xaxis = custom_XAxis('x', self.xy_viewLim.intervalx,
                                    self.xy_dataLim.intervalx, self)
        self.xaxis = self.w_xaxis
        self.w_yaxis = custom_YAxis('y', self.xy_viewLim.intervaly,
                            self.xy_dataLim.intervaly, self)
        self.yaxis = self.w_yaxis
        self.w_zaxis = custom_ZAxis('z', self.zz_viewLim.intervalx,
                            self.zz_dataLim.intervalx, self)
        self.zaxis = self.w_zaxis

        for ax in self.xaxis, self.yaxis, self.zaxis:
            ax.init3d()

# The rest of your code below, note the call to our new custom_Axes3D

points = (5*np.random.randn(3, 50)+np.tile(np.arange(1,51), (3, 1))).transpose()
fig = plt.figure(figsize = (10,10)) 
ax = custom_Axes3D(fig)

これは、最悪の場合はモンキー パッチであり、以降のバージョンでの動作に依存するべきではありません。

facecolors の修正は、__init__メソッドの 1 つをオーバーライドする必要があるため、グリッド ラインよりも簡単でしたが、より多くの作業が必要でした。

これをエンド ユーザーに公開することは難しくないように思われるため、今後のバージョンで修正される可能性があると想像できます。

于 2013-07-29T14:48:34.093 に答える