39466
pandasの`pd.scatter_matrix`で作成できる散布図行列の重複した半分を消したいのですが，どうすればよいでしょうか？  
コードは以下です．

```

    import numpy as np
    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    data = pd.read_csv("dataframe.csv")
    plt.figure(figsize=(16,16))
    pd.scatter_matrix(data)
    
```
CC BY-SA 3.0
2017-11-09T07:46:06.703
39454
2017-11-10T00:25:23.773
2017-11-09T08:07:52.337
13199
25518
question
python pandas
pandasの散布図行列の重複した半分を消したい
以下のコードで実現できました。具体的には、`scatter_matrix` が subplot たちの numpy array
を返していることを利用して、その内の上三角成分のみをイテレートして見えないようにしました。最後の部分では numpy array の上三角行列を作る関数
[`np.triu`](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.triu.html)
を使っています。(Pandas の `scatter_matrix`
のドキュメントが[これ](http://pandas.pydata.org/pandas-
docs/version/0.19.2/visualization.html#scatter-matrix-
plot)しかないようなのであくまでワークアラウンドですが……。)

```

    #!/usr/bin/env python3                                                                               
    
    # Numpy 1.13.1、Pandas 0.19.2 です。                                                                 
    # Pandas 0.21 では pandas.plotting を import することになると思います。                              
    
    import numpy as np
    import pandas as pd
    from pandas.tools.plotting import scatter_matrix
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame(np.random.randn(1000, 4), columns = ['a', 'b', 'c', 'd'])
    subplots = scatter_matrix(df)
    mask = np.triu(np.ones(subplots.shape), k = 1).astype('bool')
    for plot in subplots[mask]:
      plot.set_visible(False)
    plt.show()
    
```

[![プロット結果](https://i.stack.imgur.com/fTVzJ.png)](https://i.stack.imgur.com/fTVzJ.png)

なお、行列のサイズが大きくなるようであれば、自前で scatter matrix の各成分を for
で計算してサブプロットを作っていく方が、計算を効率良く行えると思います。
CC BY-SA 3.0
2017-11-09T15:15:47.973
39466
2017-11-10T00:25:23.773
2017-11-10T00:25:23.773
19110
19110
39454
answer