Improvement to imports, what is a better way ?

Thomas Passin list1 at tompassin.net
Thu Jan 19 21:36:59 EST 2023


On 1/19/2023 7:33 PM, avi.e.gross at gmail.com wrote:
> Just FYI, the example Dave supplied was not using python code and using a
> rather strange re-definition in the R language package he was using. Or
> maybe not.
> 
> Anyone not interested, skip the rest.
> 
> First, R does not use indentation for almost anything. So you can break one
> long line up into many lines all over the place where it is clear you are
> continuing.
> 
> Second, the ggplot package (another name for module) came along before pipes
> were used a lot and made a choice to overload the meaning of the plus sign
> selectively between "verbs" of sorts.
> 
> The code Thomas shared says:
> 
> - Set up the beginning of a plot using the arguments provided and create a
> DATA STRUCTURE. This structure is a rather complex list structure composed
> internally of many kinds of named parts, some optional.
> - Then call a verb of sorts, called geom_point() to update the same data
> structure appropriately and store info to be used LATER when you call the
> print driver that knows how to handle this data structure. In a sense, the
> first command sends the dta structure to the second command which changes it
> and passes it along to
> - the next verb is theme_bw() which changes all kinds of elements in the
> data structure and returns the update data structure.
> 
> The result is stored as the value of g2 and NOTHING HAPPENS.
> 
> If you even wrote print(g2) or implicitly printed it at the REPL level such
> as by typing "g2" or not assigning it at all to a variable at the REPL
> level, then the driver that handles such an object generates a graph to
> whatever output device is currently set in whatever format is set such as a
> JPEG image or a PDF file.
> 
> There are errors in what Thomas wrote as an example but not what is
> mentioned.

Just to be clear, my example was copy-pasted from working Python code. 
It uses the plotnine package, available from PyPi, which is a partial 
implementation of R's ggplot2 API as adapted for Python;  both are 
implementations of the ideas from The Language of Graphics of Wilkinson.

I shortened a line or two to prevent wrapping by email clients and 
perhaps I chopped something off by mistake.

> The overall flow looks like:
> 
> g2 <- ggplot(ARGS) + geom_point(ARGS) + theme_bw(ARGS)
> 
> The parentheses around the RHS are NOT needed and the above is very
> typically written as:
> 
> g2 <- ggplot(ARGS) +
> 	geom_point(ARGS) +
> 	theme_bw(ARGS)
> 
> The plus signs at the end of each line tell the REPL to keep reading.
> 
> The code shown is not working code but was an illustration. The ggplot()
> function takes many potential arguments including one for the data.frame or
> tibble that holds rows and columns of data. You then have to map some
> aesthetics such as what X and Y are bound to directly to some column, or
> perhaps to a function involving columns. That is not shown inside the aes()
> inner function and what is shown is nonsense. As usual, function arguments
> are separated by commas and I assume a line or more are missing. This
> example does not tell us what columns I being graphed against what other
> column or other necessary things. That can sometimes be told or changed
> later but I see none in this example. This function call should have ended
> without a comma and with a close parentheses followed by a plus sign.
> 
> The geom_point() function that follows can be empty and then would ask for a
> chart overlay showing just the points. This example added the size and color
> of those points.
> 
> The last verb of theme_bw() adjusts all kinds of parameters to provide a
> certain look to be basically black and white for various background items.
> 
> The example chose to include parens around everything so the plus signs
> could now be anywhere, including the start of future lines. I generally do
> not do things this way but it is a valid way.
> 
> I do note there is a python version of the ggplot package and maybe Thomas
> is writing from that point of view in python.  I have never used that.
> 
> As noted, most other R constructs use PIPES not the plus sign and I wish
> this package would change to conform but it is a bit late! LOL!
> 
> Avi
> 
> 
> 
> -----Original Message-----
> From: Python-list <python-list-bounces+avi.e.gross=gmail.com at python.org> On
> Behalf Of 2QdxY4RzWzUUiLuE at potatochowder.com
> Sent: Thursday, January 19, 2023 1:30 PM
> To: python-list at python.org
> Subject: Re: Improvement to imports, what is a better way ?
> 
> On 2023-01-19 at 12:59:21 -0500,
> Thomas Passin <list1 at tompassin.net> wrote:
> 
>> Well, it's an art, not a science [...]
> 
> +1
> 
>> # Create a plot
>> g2 = (
>>        ggplot(df2,
>>        aes('Days Since Jan 22',  # Comments can clarify these params
>>        + geom_point(size=.1, color='blue') # size, color params optional
>>        + theme_bw() # Optional theme (background, grid color, ...)
>>       )
> 
> You've got a comma followed by a plus sign in there, so I'm not exactly sure
> where the parameters to which function begin and end.
> 
> When it starts to look like this, I begin breaking out the parameters:
> 
> label = 'Days Since Jan 22'
> size = geom_point(size=.1, color='blue') theme = theme_bw()
> g2 = ggplot(df2, aes(label, size, theme))
> 
>> # Compose a long string:
>> msg = ('A very long line .....\n'
>> 	+ 'Another long bit of text ....'
>> 	+ 'plus another ....'
>>        )
> 
> If all the pieces are constants, then Python will concatenate them for
> you:
> 
> msg = ('A very long line .....\n'
>         'Another long bit of text ....'
>         'plus another')
> 
> You can even mix in "f" strings:
> 
> msg = ('long line\n'
>         f'left text {name} right text'
>         'more here')
> 
> But watch out for missing spaces between the pieces!  :-)
> 
>> The PEP-8 rules are good, but they can't cover all cases perfectly.
> 
> Some the PEP-8 rules are debatable.  Regardless, they can't cover all cases
> perfectly.  (IOW, we agree on the bit that's relevant to this
> thread.)
> --
> https://mail.python.org/mailman/listinfo/python-list
> 



More information about the Python-list mailing list