-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Revaluate the dashboard visual design #922
Comments
So the calories don't represent the energy for travel, they represent the calories expended by the participant while using active transportation. So because you rode your bike, you can eat another cookie... |
I had no idea! We can definitely redesign to make that clearer to the user. |
Yeah, not only do you save the earth by using active transportation, you also get a workout at the same time 😄 On a personal note, we drive to a specialty grocery store once a week but the rest of the time we walk or bike to grocery stores within a 3 mile radius - it's essentially walking or biking with weights. Sometimes it takes multiple trips to finish the shopping, but you should really exercise every day, right? We actually have some fairly complicated calculations using the MET values, and you can put your height and weight to get even more accurate numbers. |
Would it be possible to hide the panel about calories and how it relates to food? I think emphasizing the benefits of active transport is really cool, and an important feature, but I would advocate for doing so in a way that doesn't promote calorie-counting or ideas about earning food, since those can be harmful to people's mindsets around food and/or exercise. It probably won't bother most people, so just an option to hide that panel would likely be a sufficient accommodation to people who don't want to see it. I personally like the feature where it shows you your distance traveled by different modes a little more. Maybe we could highlight that information more, allowing for people to see how far they went in active transport, and feel accomplished? It could be an unpopular opinion, but I thought I'd at least share my perspective. |
@Abby-Wheelis thank you for your thoughtful comment about messaging around food. I agree that the notion of "earning treats" can foster an unhealthy relationship wrt eating in general. And the option of hiding highlights a struggle with the dashboard in general - there are people who like data and nice graphs, and there are people who want simplicity and a "one number" abstraction - how do we accommodate all of them? Since we are supporting configurable modules now anyway, maybe it is time to think about both how to support admin-decided configuration (as part of the dynamic config) and potentially user-led configuration (bring on the data!) However, to make sure that we can get a basic redesign done by the time Kellen's internship is done, I would suggest that we at least finish a "mass-market" version that we hope can be broadly appealing. And for that, maybe it would make sense to focus on exercise rather than food. The CDC has exercise recommendations (https://www.cdc.gov/physicalactivity/basics/adults/index.htm) of "150 minutes of moderate-intensity physical activity and 2 days of muscle strengthening activity a week". Would it be helpful to show people how their physical activity from active transportation helps them make progress towards that goal? Note that this is still a research project, so if we have time, we can show both data-heavy and summarized versions of the dashboard and see which people choose 😄 |
@shankari It makes sense that customizable dashboards would be a feature that we might look into a little further down the line, I definitely want Kellen to be able to finish his project! And yes, I think that showing active transportation as contributing towards a baseline exercise goal could be a nice way of showing people how their transportation choices are helping them in addition to helping the planet the planet. |
Okay yeah, that makes sense. And I do think that even with the possible reasons to focus on exercise rather than calories, I think the goal in total is to simply make the dashboard feel more understandable in terms of what participants may have experience with or care about. So, using units like minutes of exercise, gallons of gas saved or potentially calories burned I think all can be relatable measurements to participants. Perhaps we can have the ui reflect that? Maybe just make a few javascript functions for each potential unit someone might be concerned about (gallons of gas used / saved, exercise, Kg CO2, etc), then the user can pick and choose from a menu which they want. Then a card will be presented to the user for each that they picked. Luckily, due to react we will only really need one definition of a card element. I think we get some of those for free. KG of CO2 to gallons of gas, duration (of relevant modes of travel) to minutes exercised. But, also I understand concerns about the potential time crunch of this, or the decision fatigue it may give the user. |
I guess this is kind of happening right now, except the user at the moment doesn't have the option of choosing what particular metrics will be on the dashboard (calories, kg co2) |
my original goal for OpenPATH was a carbon footprint "meter" where people would understand the changes they needed to make to meet our 2030 and 2050 CO2 reduction goals at a per capita level. If you open the footprint tab, you can see that comparison (with the color as red if you aren't meeting those goals). This allows people to think about their "carbon budget" and what they want to spend it on. In my case, that is long trips for recreation in buses/hybrid cars with family. I will rarely drive for shorter "around town trips". But there might be people (maybe who have mobility issues) who drive everywhere around town, but don't go on vacation that often. There is no one size fits all - people and their needs are different. But for the sake of our planet, it would be good if we would meet those needs within our individual carbon budgets. I know that is complex, and maybe others don't care about their carbon footprint, but I had a magic wand, it would be to somehow highlight that. I understand the desire to make the metrics meaningful by converting them into gallons of gas saved. But even that metric is a bit context-free. Ok so I saved 10 gallons of gas. Is that good or merely "meh"? How much is really meaningful? what is my goal? |
Since we are focusing on measurement and psychology, I would like to point out that there are well known issues with using an easily-measured proxy for the real metric that we want to optimize. @Abby-Wheelis's example about food is similar - we sometimes use weight as a proxy for health since it is so easily measured. That is not completely wrong - being overweight is the single biggest risk factor for a variety of cardiovascular diseases. But an over-emphasis on the proxy can lead to optimizing the proxy (weight) while actually hurting the real metrics (health) through eating disorders. Again, I don't know that we can resolve this fully, but I would be open to doing a test on various metrics and their representations using something like Mechanical Turk if you wanted to explore some options and write a paper. |
Okay, all of that makes a lot of sense and is giving me something to think about. Perhaps having a default set of measurements, such as Kg C02 to start out with, that most people would likely not change, but give the ability to see a few other measurements if the participant is interested? I think that it would not be too difficult. Like the current mechanism to switch calorie measurements in terms of different types of food, you could visualize carbon footprint in different ways, starting with Kg CO2, but also gallons of gas, etc. Health related measurements could be shown as time exercised, calories burned, etc. |
A suggestion from @asiripanich was to show the cumulative amount of time spent at different locations (or types of locations) This may yield metrics like: This may be a healthier and more useful way of promoting fitness and well-being alongside sustainability. To accomplish this, I think we could grab some zoning information from OSM, at least to get general categories like |
I think this 'meter' idea can remain an effective focus for the Dashboard tab.
This is another thing I never knew or never noticed. I think it should be made perfectly clear to the user whether they are meeting the goals or not. |
With "My Calories", my suggestion would be to remove calorie-counting altogether, and, if we wish to keep some health or fitness metrics, we pivot to something like 'active minutes' or 'time spent on recreation' (ie. at the park / other recreational zone) |
Two things of note:
|
This design already feels much cleaner and intuitive to me. First, some general comments:
I don't think you need to. We have no restrictions on how tall or long this page is; it will scroll as long as we need it to. And no one's saying the cards need to be a uniform size, or a fixed size. Each card can grow to however large its content needs to be. I think we should be able to keep all the "Chart" features that we had before the migration started. But if you're hesitant to embed that much chart detail in a card and do want to show a simplified graph, then we could consider having a more detailed graph accessible by clicking a button on the card that opens another view. In general, I think we can space out the content way more. I would increase the margins and padding on nearly everything, especially vertically. Designers would tell you to embrace the negative space; it will feel more comfy and less overwhelming that way. Some specific comments:
|
I would suggest using a stacked bar for the "active minutes"
Because AFAIK, the page is not refreshed on resume. So if people had the app in the background but not killed (which is what we recommend for iOS) and then brought the app to the foreground, it would still show their last set of results. Not sure if this has changed in the multiple rewrites. While we are asking questions about that, the "share" button is definitely not necessary. It was a misguided attempt (back when this was e-mission, not even emTripLog) to see if people would get their friends to join them. It's now taking up precious space and when clicked, generates a completely obsolete message. If we wanted to keep the button, we could have it be a "social share" button which would share the dashboard with friends/family via email/social media. |
Thanks for the suggestions!
|
I think this makes sense if there is one dashed 'target' line and it is in reference to the total active minutes (ie. 30 minutes of physical activity). So if my chart shows 15 minutes of low-intensity, 15 minutes of moderate intensity, and 5 minutes of high-intensity, I can see that I met the goal because the bars stacked together will surpass the target line. But if there are target lines for specific levels of intensity, it wouldn't be easily conveyed without having separate bars
Sure, we could just replace 'share' then. If we want socials sharing later on, we can have 3 buttons or a menu or something. |
We should probably use |
Yes, this is what I had in mind. The CDC guidelines are 30 minutes of moderate intensity. Not sure that there are guidelines for low/high intensity. Would be interesting to think through how we might be able to display if we can find separate guidelines for different intensity levels @ctyrrellnrel any thoughts? separate bars with one separate goals? Separate slidable tabs? |
I will work on getting stacked bars working in e-mission/e-mission-phone#997 |
That's a good question, I think that having different colors of dashed lines may accommodate that, but the confusing part is that the high, medium and low intensity exercise should be weighted differently, but that is not reflected in a bar chart, which only measures minutes. But also, I think they are adding towards the same goal, so it may not make sense to have them have different goals, as having more of one may make up for less of another. I found something here that shows different guidelines for medium or high intensity exercise, which says 150 minutes of moderate intensity exercise, or 75 minutes of high intensity exercise, or a mix of both with amount of time somewhere in the middle. I don't know if there is a good way of reflecting that in a bar chart. Perhaps we could have one card that has total minutes, without intensity level considered, and another card with "weighted exercise minutes" that considers the statement above, and weights high intensity minutes as being worth 2 "exercise minutes" (which we could explain in a drop down tab below). moderate intensity minutes would be worth 1 "exercise minute". We don't necessarily have to call them exercise minutes, but something that shows different exercise intensity is weighted differently The total goal of "exercise minutes" is 150, but high intensity minutes would count as double towards this. |
I think that for simplicity and for consideration of our timeline, it is okay to just have one target of 30 minutes for overall active minutes. We can indicate in a footnote that it pertains to 'moderate intensity'. I think that our design discussion has been valuable, but we should begin on the implementation soon. @ctyrrellnrel After a final wireframe applying the recent discussion from above, I believe we will be ready to do so. |
New Wireframe:additions / changes:
Wireframe
|
I realized at Jack's comment here that I still don't think I made them big enough, so here's another wireframe with sized up cards
These are slightly sloppier, but hopefully they are enough. |
I am just a bit concerned about the sizing. It looks like we are relying a lot on bleeding edges to ensure that people know that there is more to swipe. But different phones have different form factors. So if we have a shorter phone, will we see the bleeding indicating the summaries? I know that reactive design can address quite a bit of this, but in my experience, reactive design primarily works for big differences in form factors - e.g. desktop versus mobile. I am not sure it can capture the differences between iPhone XS and iPhone Pro and iPhone Pro Max (for example). @JGreenlee are there tools for this in ReactJS/React native paper? |
I am not too worried about whether there is a visible bleeding edge vertically. Vertical scrolling is standard on web and mobile. If there's more content below, I think people will find it. Horizontally, I do think it's important to signify that the cards are swipeable. Horizontal scrolling is easier to miss as a user. Note to self: the above works in RN but doesn't snap on RN Web. For snapping to work before the migration is done, we may need the CSS workaround from necolas/react-native-web#1250 |
Web and mobile layouts grow and expand vertically. We shouldn't try to force a layout to be a certain height. On a tiny screen, you might only see one card at a time. On a bigger screen, you might see 2 or start to see the third. That's perfectly fine, and actually much better than trying to cram the same content on different screens |
Given this complexity, should we even use bleeding to signify that cards are swipeable? There are other cues that are commonly used (e.g. dots below the content, < > at the edges, etc - think "carousel"). Again, given our limited bandwidth, testing capacity and control, I would err on the side of simple visualizations and not choose super-complex UI layouts that are optimized down to the pixel level. Big companies have the resources to build separate screens for every single iOS phone dimensions out there. We don't. |
@ctyrrellnrel I think this design gives us what we need to start working on the implementation. The first thing I'd do is embed a chart inside a card. Look at e-mission/e-mission-phone#997 and clone my Try to replicate this, not inside the Chart tab, but inside the 'details' cards - (for Distance, Speed, etc). The Once you have a barchart showing up, try adding Share some screenshots so we can see how it looks and whether I need to modify the BarChart component. If you get stuck or need clarification about the data structure that barchart accepts, feel free to ask. |
I don't think it is too complex, but if you're worried about it then the < > arrows are fine too. The ScrollView is very flexible and responsive, and I think the horizontal bleeding edge will work on any screen size. There's nothing about this mechanism that is pixel perfect or specific to any screen size. The only relevant consideration is that each card must be less wide than the screen itself, so that the next card shows at the edge of the screen. This is easily done with RN's |
I just didn't want us to get too stuck on the bleeding design and spend a lot of time tweaking it back and forth |
Okay, was just working up a design for the arrows and dots, but I guess we should just start on it, and figure out what works and doesn't work while doing that. We could have every option is represented by an icon at the bottom of the card, and instead of swiping, one just clicks on the relevant icon. *like in the My Calories Card I will start working on getting that graph into the card. |
After we get the basic chart working, we should decide which color palette to use. Ideally this would:
e-mission/e-mission-phone#997 (comment) Alternatively, are there standard palettes in chartjs like the Tab10 or Tab20 palettes in matplotlib? |
I just quickly put in the chart, and it was EXTREMELY easy to do so. Just a quick plop in to one of the cards, and it fit perfectly, no issues. Also, didn't try to do new inline objects in angular, not sure if you even can do that, just defined them in the function themself (for creating the bar lines). But not too worried about that, as likely the variables concerned with the goals won't need to be passed into the function, as they are not dependent on what the user is doing or which user it is. (unless we could use a user-dependent bar to show their average over the past certain number of days / weeks). |
An example I created for the carousel, which we can refer back to once we get to that step of the migration https://snack.expo.dev/@jgreenlee/carousel-scrollview-with-bleeding-edges |
@ctyrrellnrel so is there a draft PR somewhere? Is there an ETA? |
I think for charts, our palette needs at least 8 distinguishable colors, but company/brand color palettes don't tend to have that many.
ChartJS does have a default palette, but there are only 7 colors and I don't think it's colorblind-friendly. Seaborn improves on Matplotlib's palette a bit. There's a Conveniently, the NREL palette has blue as primary and orange as secondary; these are the first two in |
Yes, I will be working to put out a draft pr by the end of the day. |
Currently have a working button that switches between two different views, that graph and 'details', although the details isn't actually fleshed out yet, just placeholder text. e-mission/e-mission-phone#1002 (comment) @shankari @JGreenlee |
Good! I don't know who jackcsullivan is, but it isn't me.. |
FYI: jackcsullivan was a Berkeley undergrad/MS student who worked on e-mission in the past - the TripAware project (https://bets.cs.berkeley.edu/publications/2019buildsys_tripaware.pdf) and this MS thesis (https://www2.eecs.berkeley.edu/Pubs/TechRpts/2019/EECS-2019-69.html) |
oops switched that |
Closing since this is superceded by #961 |
Maybe we should redesign of dashboard before migrating the dashboard from angular to react? (Issue #857)
I think there are a few things to change:
potential tasks
Current Design
The text was updated successfully, but these errors were encountered: