pythonword-cloud

Save plot using matplotlib


I try to generate two separate wordcloud for positive and negative. However, when I use savefig it only save the last figure. The last figure is negative sentiment.

TEXT_COLUMN = 'pre_process'
TARGET_COLUMN = 'label'

# visualize the data on a WordCloud
def visualize(label):
    words = ''
    for msg in data[data[TARGET_COLUMN] == label][TEXT_COLUMN]:
        msg = msg.lower()
        words += msg + ' '
    wordcloud = WordCloud(width=600, height=600).generate(words)
    plt.imshow(wordcloud)
    plt.axis('off')
    plt.title('Wordcloud')
    plt.savefig('static/airasia_negcloud.png',transparent=True)
    plt.show()
    plt.clf()

# display wordcloud
visualize(1)
visualize(0)

Here is my wordcloud coding. When I visualize it, it display correctly on PyCharm but in the folder, one is blank image which is suppose to be positive wordcloud and another one is negative worcloud.


Solution

  • The issue you are facing is because you are using the same file name ('static/airasia_negcloud.png') to save both of your wordclouds, so only the last one is being saved. To solve this issue, you can either use a different file name for each of the wordclouds or overwrite the file every time you call plt.savefig(). To use a different file name, you can add the label to the file name like this:

    plt.savefig('static/airasia_{}cloud.png'.format('pos' if label == 0 else 'neg'),transparent=True)
    

    Or, to overwrite the file, you can add the line plt.clf() before the call to plt.savefig(), which will clear the current figure:

    def visualize(label):
    words = ''
    for msg in data[data[TARGET_COLUMN] == label][TEXT_COLUMN]:
        msg = msg.lower()
        words += msg + ' '
    wordcloud = WordCloud(width=600, height=600).generate(words)
    plt.imshow(wordcloud)
    plt.axis('off')
    plt.title('Wordcloud')
    plt.savefig('static/airasia_negcloud.png',transparent=True)
    plt.show()
    plt.clf()