sns.set () отменяет параметры легенды - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь добавить штриховку к легенде о графах морского происхождения, но она не работает. Единственное, что я могу изменить, это размещение легенды и размер шрифта. Я продемонстрирую на простом примере (этот пример взят из https://matplotlib.org/gallery/api/legend.html):

import numpy as np
import matplotlib.pyplot as plt

# Make some fake data.
a = b = np.arange(0, 3, .02)
c = np.exp(a)
d = c[::-1]

# Create plots with pre-defined labels.
fig, ax = plt.subplots()
ax.plot(a, c, 'k--', label='Model length')
ax.plot(a, d, 'k:', label='Data length')
ax.plot(a, c + d, 'k', label='Total message length')

legend = ax.legend(loc='upper center', shadow=True, fontsize='x-large')

# Put a nicer background color on the legend.
legend.get_frame().set_facecolor('#00FFCC')

plt.show()  

В этом примере заливка отображается правильно. Использование sns.set ():

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
# Make some fake data.
a = b = np.arange(0, 3, .02)
c = np.exp(a)
d = c[::-1]

# Create plots with pre-defined labels.
fig, ax = plt.subplots()
ax.plot(a, c, 'k--', label='Model length')
ax.plot(a, d, 'k:', label='Data length')
ax.plot(a, c + d, 'k', label='Total message length')

legend = ax.legend(loc='upper center', shadow=True, fontsize='x-large')

# Put a nicer background color on the legend.
legend.get_frame().set_facecolor('#00FFCC')

plt.show()  

Теперь параметры loc и fontsize все еще работают, но затенение не появляется. Есть ли способ добавить затенение при использовании sns.set ()? Спасибо

Редактировать: я не упомянул, что использую собственный метод output_plot () для отображения этих изображений на веб-странице. Поэтому вместо plt.show () я использую print (output_plot ()) следующим методом:

def output_plot(clickable=False):
    from io import BytesIO
    import base64
    import matplotlib.pyplot as plt

    output = ""
    fig = plt.gcf()

    if clickable:
        large_image = BytesIO()
        fig.savefig(large_image, format='png')
        large_image.seek(0)
        large_image = base64.encodebytes(large_image.getvalue()).decode()

    fig.set_size_inches([13.0/2,8.0/2])
    small_image = BytesIO()
    fig.savefig(small_image, format='png')
    small_image.seek(0)
    small_image = base64.encodebytes(small_image.getvalue()).decode()

    if clickable:
        output = """<span style="white-space: nowrap;">
                <a href="javascript:(
                    function(){
                        Ext.create('Ext.window.Window', {
                            title: 'Graph',
                            height: 800,
                            width: 1100,
                            layout: 'fit',
                            html: '<img src=\\\'data:image/png;base64,%s\\\'/>'
                        }).show();
                    }
                )()">
                    <img src='data:image/png;base64,%s'/>
                </a>
            </span>""" % (large_image, small_image)
    else:
        output = """<span style="white-space: nowrap;">                
                        <img src='data:image/png;base64,%s'/>
                    </span>""" % small_image

    return output

Я нахожусь на matplotlib версии 1.5.1 и seaborn версии 0.7.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...