JuliaPy / PyPlot.jl

Plotting for Julia based on matplotlib.pyplot
https://github.com/JuliaPy/PyPlot.jl
MIT License
469 stars 85 forks source link

unrelated println statement leads to blank plot #559

Open StephenVavasis opened 1 year ago

StephenVavasis commented 1 year ago

I encountered a strange bug in PyPlot that a println statement in a certain place in my code causes a plot to come out completely blank. Below is a stripped-down version of my code. If I include the code as is, then it makes three plots, but the third plot window is empty. However, if I comment out the println statement on l. 23, then the third plot appears as expected. This is Julia version 1.8.2, PyPlot was just installed today (2022-10-16), python version (according to Pyplot) is 3.9.12, matplotlib version (according to the error message when I type hold(true) at the REPL) is 3.5.2, and the platform is Windows 10.

module driver_ppbug
using LinearAlgebra
using PyPlot

function admm1(a)
    n = size(a,2)
    clusterID = vcat(ones(Int(n/2)),2*ones(Int(n/2)))
    itcount = 1
    return clusterID, itcount
end

function find_k_largest_clusters(clusterID, k1)
    return vcat([[1,2,3,4], [5,6,7]], [[i] for i = 8 : length(clusterID)])
end

function plotresult(a, clusterID)
    n = size(a,2)
    colors1 = "rgbcmky"
    mxcolor = length(colors1)
    result = find_k_largest_clusters(clusterID, mxcolor)
    println("result lens = ", [length(q) for q in result])
    plotted = [false for i = 1 : n]
    for i = 1 : mxcolor
        if length(result[i]) > 1
            plot(a[1,result[i]], a[2,result[i]], "*" * colors1[[i]])
        else
            break
        end
       plotted[result[i]] .= true
    end
    plot(a[1, .!plotted], a[2, .!plotted], "." * colors1[[mxcolor]])
    axis("equal")
    nothing
end    

function gm_generator(n)
    a = hcat(collect(1.0:1.0:n), sin.(1.0:1.0:n))'
    compID = vcat(ones(Int(n/2)), 2*ones(Int(n/2)))
    weight = ones(n)
    return a, compID, weight
end

function mxgau(n, sigma, lambdascale1, lambdascale2)
    a, compID, weight = gm_generator(n)
    sub1 = findall(compID .== 1)
    sub2 = findall(compID .== 2)
    close("all")
    figure(1)
    plot(a[1,sub1], a[2,sub1], "*r")
    plot(a[1,sub2], a[2,sub2], "*g")
    axis("equal")
    figure(2)
    plot(a[1,:], a[2,:], "*k")
    axis("equal")
    clusterID, itcount1 = admm1(a)
    figure(3)
    plotresult(a, clusterID)
    println("itcount1 = ", itcount1)
    nothing
end

mxgau(20, .3, .3, .1)

end